Java-API简析_java.io.FilterOutputStream类(基于 Latest JDK)(浅析源码)

这篇具有很好参考价值的文章主要介绍了Java-API简析_java.io.FilterOutputStream类(基于 Latest JDK)(浅析源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/134106510
出自【进步*于辰的博客】

1、概述

继承关系:

  • java.lang.Object
    • java.lang.Enum<TimeUnit>
      • java.util.concurrent.TimeUnit

所有已实现的接口:
Serializable、Comparable<TimeUnit>


public enum TimeUnitextends Enum<TimeUnit>

TimeUnit 表示给定单元粒度的时间段,它提供在这些单元中进行跨单元转换和执行计时及延迟操作的实用工具方法。TimeUnit 不维护时间信息,但是有助于组织和使用可能跨各种上下文单独维护的时间表示形式。 (简言之,此类是时间单位的抽象

TimeUnit 主要用于通知基于时间的方法如何解释给定的计时参数。例如,如果 lock 不可用,则以下代码将在 50 毫秒后超时:

  Lock lock = ...;
  if ( lock.tryLock(50L, TimeUnit.MILLISECONDS) ) ...

而以下代码将在 50 秒后超时:

 Lock lock = ...;
 if ( lock.tryLock(50L, TimeUnit.SECONDS) ) ...

但是注意,不保证特定超时实现能够以与给定 TimeUnit 相同的粒度通知 段。

从以下版本开始:
1.5

2、常量摘要

static final long C0 = 1L;
static final long C1 = C0 * 1000L;
static final long C2 = C1 * 1000L;
static final long C3 = C2 * 1000L;
static final long C4 = C3 * 60L;
static final long C5 = C4 * 60L;
static final long C6 = C5 * 24L;

static final long MAX = Long.MAX_VALUE;

显而易见,这些常量是时间刻度。

3、枚举常量摘要

3.1 概况

单位:天。

DAYS {
    public long toNanos(long d)   { return x(d, C6/C0, MAX/(C6/C0)); }
    public long toMicros(long d)  { return x(d, C6/C1, MAX/(C6/C1)); }
    public long toMillis(long d)  { return x(d, C6/C2, MAX/(C6/C2)); }
    public long toSeconds(long d) { return x(d, C6/C3, MAX/(C6/C3)); }
    public long toMinutes(long d) { return x(d, C6/C4, MAX/(C6/C4)); }
    public long toHours(long d)   { return x(d, C6/C5, MAX/(C6/C5)); }
    public long toDays(long d)    { return d; }
    public long convert(long d, TimeUnit u) { return u.toDays(d); }
    int excessNanos(long d, long m) { return 0; }
};

单位:小时。

HOURS {
    public long toNanos(long d)   { return x(d, C5/C0, MAX/(C5/C0)); }
    public long toMicros(long d)  { return x(d, C5/C1, MAX/(C5/C1)); }
    public long toMillis(long d)  { return x(d, C5/C2, MAX/(C5/C2)); }
    public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); }
    public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); }
    public long toHours(long d)   { return d; }
    public long toDays(long d)    { return d/(C6/C5); }
    public long convert(long d, TimeUnit u) { return u.toHours(d); }
    int excessNanos(long d, long m) { return 0; }
},

单位:分。

MINUTES {
    public long toNanos(long d)   { return x(d, C4/C0, MAX/(C4/C0)); }
    public long toMicros(long d)  { return x(d, C4/C1, MAX/(C4/C1)); }
    public long toMillis(long d)  { return x(d, C4/C2, MAX/(C4/C2)); }
    public long toSeconds(long d) { return x(d, C4/C3, MAX/(C4/C3)); }
    public long toMinutes(long d) { return d; }
    public long toHours(long d)   { return d/(C5/C4); }
    public long toDays(long d)    { return d/(C6/C4); }
    public long convert(long d, TimeUnit u) { return u.toMinutes(d); }
    int excessNanos(long d, long m) { return 0; }
},

单位:秒。

SECONDS {
    public long toNanos(long d)   { return x(d, C3/C0, MAX/(C3/C0)); }
    public long toMicros(long d)  { return x(d, C3/C1, MAX/(C3/C1)); }
    public long toMillis(long d)  { return x(d, C3/C2, MAX/(C3/C2)); }
    public long toSeconds(long d) { return d; }
    public long toMinutes(long d) { return d/(C4/C3); }
    public long toHours(long d)   { return d/(C5/C3); }
    public long toDays(long d)    { return d/(C6/C3); }
    public long convert(long d, TimeUnit u) { return u.toSeconds(d); }
    int excessNanos(long d, long m) { return 0; }
},

单位:毫秒。

MILLISECONDS {
    public long toNanos(long d)   { return x(d, C2/C0, MAX/(C2/C0)); }
    public long toMicros(long d)  { return x(d, C2/C1, MAX/(C2/C1)); }
    public long toMillis(long d)  { return d; }
    public long toSeconds(long d) { return d/(C3/C2); }
    public long toMinutes(long d) { return d/(C4/C2); }
    public long toHours(long d)   { return d/(C5/C2); }
    public long toDays(long d)    { return d/(C6/C2); }
    public long convert(long d, TimeUnit u) { return u.toMillis(d); }
    int excessNanos(long d, long m) { return 0; }
},

单位:微秒。

MICROSECONDS {
    public long toNanos(long d)   { return x(d, C1/C0, MAX/(C1/C0)); }
    public long toMicros(long d)  { return d; }
    public long toMillis(long d)  { return d/(C2/C1); }
    public long toSeconds(long d) { return d/(C3/C1); }
    public long toMinutes(long d) { return d/(C4/C1); }
    public long toHours(long d)   { return d/(C5/C1); }
    public long toDays(long d)    { return d/(C6/C1); }
    public long convert(long d, TimeUnit u) { return u.toMicros(d); }
    int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); }
},

单位:纳秒。

NANOSECONDS {
    public long toNanos(long d)   { return d; }
    public long toMicros(long d)  { return d/(C1/C0); }
    public long toMillis(long d)  { return d/(C2/C0); }
    public long toSeconds(long d) { return d/(C3/C0); }
    public long toMinutes(long d) { return d/(C4/C0); }
    public long toHours(long d)   { return d/(C5/C0); }
    public long toDays(long d)    { return d/(C6/C0); }
    public long convert(long d, TimeUnit u) { return u.toNanos(d); }
    int excessNanos(long d, long m) { return (int)(d - (m*C2)); }
},

3.2 说明

这些常量就是不同的时间单位,其内方法的底层逻辑就是通过时间单位间换算关系对指定“时间”进行转换。

4、方法摘要

4.1 long convert(long duration, TimeUnit unit)

将给定单元的时间段转换到此单元。

4.2 void sleep(long timeout)

使用此单元执行 Thread.sleep.这是将时间参数转换为 Thread.sleep 方法所需格式的便捷方法。

public voidsleep(long timeout) throws InterruptedException {
    if (timeout > 0) {
        long ms = toMillis(timeout);
        int ns = excessNanos(timeout, ms);
        Thread.sleep(ms, ns);
    }
}

后续解析。

4.3 void timedJoin(Thread thread, long timeout)

使用此时间单元执行计时的 Thread.join()

public void timedJoin(Thread thread, long timeout)
        throws InterruptedException {
    if (timeout > 0) {
        long ms = toMillis(timeout);
        int ns = excessNanos(timeout, ms);
        thread.join(ms, ns);
    }
}

后续解析。

4.4 void timedWait(Object obj, long timeout)

使用此时间单元执行计时的 Object.wait()

public void timedWait(Object obj, long timeout)
        throws InterruptedException {
    if (timeout > 0) {
        long ms = toMillis(timeout);
        int ns = excessNanos(timeout, ms);
        obj.wait(ms, ns);
    }
}

后续解析。

4.5 long toMicros(long duration)

等效于 MICROSECONDS.convert(duration, this)

4.6 long toMillis(long duration)

等效于 MILLISECONDS.convert(duration, this)

4.7 long toNanos(long duration)

等效于 NANOSECONDS.convert(duration, this)

4.8 long toSeconds(long duration)

等效于 SECONDS.convert(duration, this)

4.9 static TimeUnit valueOf(String name)

返回带有指定名称的该类型的枚举常量 。

4.10 static TimeUnit[] values()

按照声明该枚举类型的常量的顺序,返回包含这些常量的数组。

4.11 说明

此类的所有toXX()的业务都是通过时间单位间换算关系进行时间转换。

示例。

TimeUnit unit = TimeUnit.MINUTES;
unit.toNanos(1);// 换算成纳秒,60000000000
unit = TimeUnit.SECONDS;
unit.toNanos(1);// 1000000000

5、方法摘要(不开放)

5.1 static long x(long d, long m, long over)

“时间”换算。

static long x(long d, long m, long over) {
    if (d >over) return Long.MAX_VALUE;
    if (d < -over) return Long.MIN_VALUE;
    return d * m;
}

最后

如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。


本文暂缓更新。文章来源地址https://www.toymoban.com/news/detail-715509.html

到了这里,关于Java-API简析_java.io.FilterOutputStream类(基于 Latest JDK)(浅析源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java-API简析_java.net.Proxy类(基于 Latest JDK)(浅析源码)

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131881661 出自【进步*于辰的博客】 继承关系: java.lang.Object java.net.Proxy public class Proxy extends Object 此类表示代理设置,通常为类型( http 、 socks )和套接字地址。

    2024年02月16日
    浏览(35)
  • ES8 向量搜索(knn-search)java-api 实践

    官方文档-knn-search kNN搜索 k-nearest neighbor (kNN)搜索找到与查询向量最近的k个向量,如通过相似度计算。 kNN的常见用例包括: 基于自然语言处理(NLP)算法的相关性排序 产品推荐和推荐引擎 图像或视频的相似性搜索 要运行kNN搜索,您必须能够将数据转换为有意义的向量值

    2024年02月12日
    浏览(46)
  • Hadoop系统应用之HDFS相关操作 - - Java-API对HDFS的操作(IDEA版)

    通过Java API来操作HDFS文件系统HDFS,相关的操作有:文件上传、文件下载、新建文件夹、查看文件、删除文件。 1.Linux下安装好hadoop,这里使用hadoop2.7.3 2.window解压hadoop2.7.3的包 2.Windows下安装好jdk1.8  3.Windows下安装好IDEA,这里使用IDEA2022 4.Windows下安装好maven,这里使用Maven3.6.3

    2024年02月05日
    浏览(51)
  • 关于Java中单例模式(饿汉模式和懒汉模式)的简析

    目录 一.什么是单例模式 二.饿汉模式和懒汉模式 饿汉模式 代码 懒汉模式 代码 关于多线程安全的问题 如何解决懒汉模式多线程安全问题 双if判断 简单来说,就是我们在程序中通过代码进行限制,在该程序中 只能创建一个对象 因为只能创建一个对象,所以对于我们而言就有两种

    2024年02月10日
    浏览(80)
  • 基于hadoop的HBase JAVA API

    摘要:   HBase的Java API提供了一种与HBase数据库进行交互的方式,通过编写Java程序可以连接到HBase集群并对数据进行存储、检索和处理。该API适用于大规模数据存储、实时数据访问和高扩展性需求的场景。具有高可靠性、高扩展性和高性能的特点。它可以处理海量数据,并且支

    2024年02月03日
    浏览(48)
  • Java基于API接口爬取淘宝商品数据

    随着互联网的普及和电子商务的快速发展,越来越多的商家选择在淘宝等电商平台上销售商品。对于开发者来说,通过API接口获取淘宝商品数据,可以更加便捷地进行数据分析和商业决策。本文将介绍如何使用Java基于淘宝API接口爬取商品数据,包括请求API、解析JSON数据、存

    2024年02月08日
    浏览(51)
  • 阿里通义千问API(Java)使用教程,基于Springboot后端

    1.1 登录阿里云官网并搜索模型服务灵积,开通key 1.2 点击上图中的控制台并进入 1.3 创建key 2.1 导入以下俩个坐标 2.2 编写Controller层  这里controller层并未将前端的请求数据传入给api中的参数,有需求的可以自己加一下,这里就使用浏览器测试一下看是否返回数据即可  2.3 Ser

    2024年04月09日
    浏览(128)
  • 基于 SpringBoot 2.7.x 使用最新的 Elasticsearch Java API Client 之 ElasticsearchClient

    从 Java Rest Client 7.15.0 版本开始,Elasticsearch 官方决定将 RestHighLevelClient 标记为废弃的,并推荐使用新的 Java API Client,即 ElasticsearchClient. 为什么要将 RestHighLevelClient 废弃,大概有以下几点: 维护成本高 :RestHighLevelClient 需要和 Elasticsearch APIs 的更新保持一致,而 Elasticsearch A

    2024年02月08日
    浏览(49)
  • 在Java Web项目中,添加Tomcat的Servlet-api.jar包(基于IDEA)

    我的IDEA版本:2022.2 最近在学Java Web,教材上讲的添加Tomcat的Servlet-api.jar不是很清晰,上网查了查,写下了该笔记 1. 首先,先在项目下建一个文件夹,名为libs 2. 然后,到你下载的Tomcat的文件夹下,找到其子文件夹【lib】,点击进入【lib】 3. 在【lib】中找到 servlet-api.jar ,选中

    2024年02月07日
    浏览(50)
  • manifest for docker.io/arm64v8/elasticsearch:latest not found问题处理

    使用docker安装elasticsearch的时候可能会碰到这样的问题: manifest for docker.io/arm64v8/elasticsearch:latest not found 在安装arm64的elasticsearch时,docker安装会报错,无法继续进行,意思就是在docker找不到最新版本的服务,这个时候要注意,在docker hub官网上面有关于elasticsearch的版本号,如果

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包