All Classes and Interfaces
Class
Description
Bean描述抽象类
超时和限制大小的缓存的默认实现
继承此抽象缓存需要:
创建一个新的Map
实现
prune 策略
MultiValueMap的基本实现抽象转换器,提供通用的转换逻辑,同时通过convertInternal实现对应类型的专属逻辑
转换器不会抛出转换异常,转换失败时会返回
null
抽象转换器的默认逻辑不适用于有泛型参数的对象,如Map、Collection、Entry等。通用逻辑包括:
value为null时返回null
目标类型是null或者TypeVariable时,抛出ConvertException异常
目标类型非class时,抛出IllegalArgumentException
目标类型为值的父类或同类,直接强转返回
抽象的对象拷贝封装,提供来源对象、目标对象持有
抽象的
Map.Entry实现,来自Guava
实现了默认的AbstractEntry.equals(Object)、AbstractEntry.hashCode()、AbstractEntry.toString()方法。
默认AbstractEntry.setValue(Object)抛出异常。文件缓存,以解决频繁读取文件引起的性能问题
抽象Bloom过滤器
Apache 发布的MetroHash算法抽象实现,是一组用于非加密用例的最先进的哈希函数。
除了卓越的性能外,他们还以算法生成而著称。
字符串模板-占位符-抽象 SectionBuffer
抽象服务加载器,提供包括路径前缀、服务类、类加载器、编码、安全相关持有
泛型变量和泛型实际类型映射关系缓存
签名算法类型
see: https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Signature
模式
加密算法模式,是用来描述加密算法(此处特指分组密码,不包括流密码)在加密时对明文分组的模式,它代表了不同的分组方式
Cipher模式的枚举封装
别名注解,使用此注解的字段、方法、参数等会有一个别名,用于Bean拷贝、Bean转Map等。
当在注解中使用时,可为令多个属性互相关联,当对其中任意属性赋值时,
会将属性值一并同步到所有关联的属性中。
该功能参考
AnnotatedElementsALL逻辑复合过滤器,即所有过滤器都满足的时候才满足,
只要有一个过滤器不满足就立刻返回不满足,
如果没有过滤器的时候则认为所有过滤器都满足
年鉴
类型: 已存在异常
动物
注解工具类
快速获取注解对象、注解值等工具封装
AnnotatedElement工具类,提供对层级结构中AnnotatedElement上注解及元注解的访问支持,
并提供诸如基于Alias的属性别名、基于父子注解间的属性值覆盖等特殊的属性映射机制支持。
搜索层级结构
参考 Spring 中AnnotatedElementUtils,
工具类提供get以及find两种语义的搜索:
get:表示搜索范围仅限于指定的AnnotatedElement本身;
find:表示搜索范围除了指定的AnnotatedElement本身外,
若AnnotatedElement是类,则还会搜索其所有关联的父类和父接口;
若AnnotatedElement是方法,则还会搜索其声明类关联的所有父类和父接口中,与该方法具有相同方法签名的方法对象;
eg:
若类A分别有父类和父接口B、C,
则通过getXXX方法将只能获得A上的注解,
而通过findXXX方法将能获得A、B、C上的注解。
搜索元注解
工具类支持搜索注解的元注解。在所有格式为getXXX或findXXX的静态方法中,
若不带有directly关键字,则该方法支持搜索元注解,否则不支持搜索元注解。
eg:
若类A分别有父类和父接口B、C,上面分别有注解X与其元注解Y,
则此时基于A有:
getDirectlyXXX:能够获得A上的注解X;
getXXX:能够获得A上的注解X及元注解Y;
findDirectlyXXX:能够分别获得A、B、C上的注解X;
findXXX:能够分别获得A、B、C上的注解X及元注解Y;
注意:在当前实例中将无视Inherited的效果,即通过directly方法将无法获得父类上带有Inherited的注解。
注解属性映射
工具类支持注解对象属性上的一些属性映射机制,即当注解被扫描时,
将根据一些属性映射机制“解析”为其他类型的属性,这里支持的机制包括:
基于Alias的属性别名:若注解属性通过Alias互相关联,则对其中任意属性赋值,则等同于对所有关联属性赋值;
eg:用于增强注解的包装器
代理注解处理器,用于为
AnnotationMapping生成代理对象,当从该代理对象上获取属性值时,
总是通过AnnotationMapping.getResolvedAttributeValue(String, Class)获取。表明注解是一个合成的注解
注解代理
通过代理指定注解,可以自定义调用注解的方法逻辑,如支持
Alias 注解ANSI标准颜色
ANSI 4bit 颜色和Lab颜色映射关系
ANSI 8-bit前景或背景色(即8位编码,共256种颜色(2^8) )
0-7: 标准颜色(同ESC [ 30–37 m)
8-15: 高强度颜色(同ESC [ 90–97 m)
16-231(6 × 6 × 6 共 216色): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
232-255: 从黑到白的24阶灰度色
ANSI 8bit 颜色和Lab颜色映射关系
ANSI可转义节点接口,实现为ANSI颜色等
ANSI文本样式风格
ANSI颜色和Lab颜色的对应查找表
ANT风格路径过滤器
ANT风格路径资源加载器
Ant风格的路径匹配器。
来自Spring-core和Ant
Tests whether a string matches against a pattern via a
Pattern.The default
Comparator implementation returned by
AntPathMatcher.getPatternComparator(String).ANY逻辑复合过滤器,即任意一个过滤器满足时就满足,当没有过滤器的时候则认为没有过滤器满足,也就是不满足
同时继承
Writer和实现Appendable的聚合类,用于适配两种接口操作排列A(n, m)
排列组合相关类 参考:http://cgs1999.iteye.com/blog/2327664
数组转换器,包括原始类型数组
数组Iterator对象
数组工具类
Array检查工具类,提供字对象的blank和empty等检查
empty定义:
null or 空字对象:""
blank定义:null or 空字对象:"" or 空格、全角空格、制表符、换行符,等不可见字符
数组包装,提供一系列数组方法
ASCII字符对应的字符串缓存
断言
断言某些对象或值是否符合规定,否则抛出异常。经常用于做变量检查
将调用转发给另一个调用的
Sink将调用转发给另一个调用的
Source将调用转发给另一个调用的
Timeout.将类或方法标记为异步
当一个“public void”方法被注释为“@Async”时,
框架会通过添加一个新方法作为原始方法的副本(名称)
来增强类是调用原始方法的结果
CompletableFuture异步工具类
CompletableFuture 是 Future 的改进,可以通过传入回调对象,在任务完成后调用之此超时使用后台线程在超时发生时精确地执行操作 用它来
在本地不支持超时的地方实现超时,例如对阻塞的套接字操作.
原子引用加载器
使用
AtomicReference 实懒加载,过程如下类型: 认证异常
列表分区或分段
通过传入分区个数,将指定列表分区为不同的块,每块区域的长度均匀分布(个数差不超过1)
Base16(Hex)编码解码器
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制,一般用数字0到9和字母A到F表示(其中:A~F即10~15)。
例如十进制数57,在二进制写作111001,在16进制写作39。
Base32 - encodes and decodes RFC4648 Base32
(see https://datatracker.ietf.org/doc/html/rfc4648#section-6 )
base32就是用32(2的5次方)个特定ASCII码来表示256个ASCII码。
所以,5个ASCII字符经过base32编码后会变为8个字符(公约数为40),长度增加3/5.不足8n用“=”补足。
根据RFC4648 Base32规范,支持两种模式:
Base 32 Alphabet (ABCDEFGHIJKLMNOPQRSTUVWXYZ234567)
"Extended Hex" Base 32 Alphabet (0123456789ABCDEFGHIJKLMNOPQRSTUV)
Base32解码器
Bas32编码器
Base32 - encodes and decodes RFC4648 Base32
(see https://datatracker.ietf.org/doc/html/rfc4648#section-6 )
base32就是用32(2的5次方)个特定ASCII码来表示256个ASCII码。
所以,5个ASCII字符经过base32编码后会变为8个字符(公约数为40),长度增加3/5.不足8n用“=”补足。
根据RFC4648 Base32规范,支持两种模式:
Base 32 Alphabet (ABCDEFGHIJKLMNOPQRSTUVWXYZ234567)
"Extended Hex" Base 32 Alphabet (0123456789ABCDEFGHIJKLMNOPQRSTUV)
Base58工具类,提供Base58的编码和解码方案
参考: https://github.com/Anujraval24/Base58Encoding
规范见:https://en.bitcoin.it/wiki/Base58Check_encoding
Base58解码器
Base58编码器
Base58编码器
此编码器不包括校验码、版本等信息
Base62工具类,提供Base62的编码和解码方案
Base62解码器
Base62编码器
Base62编码解码实现,常用于短URL
From https://github.com/seruco/base62
Base64工具类,提供Base64的编码和解码方案
base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,
也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。
Base64解码实现
此解码保留的原因是,JDK提供的解码需要指定是否为URL安全的或是否换行,此解码无需区分
基本变量类型的枚举
基本类型枚举包括原始类型和包装类型
Bean属性缓存
缓存用于防止多次反射造成的性能问题
Bean转换器,支持:
Bean拷贝,提供:
Bean信息描述做为BeanInfo替代方案,此对象持有JavaBean中的setters和getters等相关信息描述
查找Getter和Setter方法时会:
Bean异常
Bean工具类
Bean路径表达式,用于获取多层嵌套Bean中的字段值或Bean对象
根据给定的表达式,查找Bean中对应的属性值对象。 表达式分为两种:
.表达式,可以获取Bean对象中的属性(字段)值或者Map中key对应的值
[]表达式,可以获取集合等对象中对应index的值
Bean属性拷贝到Bean中的拷贝器
Bean属性拷贝到Map中的拷贝器
本类是用于构建树的工具类,特点是采取lambda,以及满足指定类型的Bean进行树操作
Bean需要满足三个属性:
包含不为null的主键(例如id)
包含容许为null的关联外键(例如parentId)
包含自身的子集,例如类型为List的children
本类的构建方法是通过
BeanTree.of 进行构建,例如:Bean值提供器
神兽
日期间隔
BiConsumerX
BiFunctionX
双向Map
互换键值对不检查值是否有重复,如果有则后加入的元素替换先加入的元素
值的顺序在HashMap中不确定,所以谁覆盖谁也不确定,在有序的Map中按照先后顺序覆盖,保留最后的值
它与TableMap的区别是,BiMap维护两个Map实现高效的正向和反向查找
BinaryOperatorX
属性绑定器
用于绑定的注解
可序列化的BiPredicate
通过位运算表示状态的工具类
参数必须是 `偶数` 且 `大于等于0`
Blob转String
当任务队列过长时处于阻塞状态,直到添加到队列中
如果阻塞过程中被中断,就会抛出
InterruptedException异常
有时候在线程池内访问第三方接口,只希望固定并发数去访问,并且不希望丢弃任务时使用此策略,队列满的时候会处于阻塞状态(例如刷库的场景)
其他系统内置的拒绝策略,见定义的枚举 RejectPolicy 线程拒绝策略枚举.Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。
如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。
因此Bloom filter具有100%的召回率。这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况。
读取带BOM头的流内容,
getCharset()方法调用后会得到BOM头的编码,且会去除BOM头
BOM定义:http://www.unicode.org/unicode/faq/utf_bom.html
00 00 FE FF = UTF-32, big-endian
FF FE 00 00 = UTF-32, little-endian
EF BB BF = UTF-8
FE FF = UTF-16, big-endian
FF FE = UTF-16, little-endian
使用:
String enc = "UTF-8"; // or NULL to use systemdefault
FileInputStream fis = new FileInputStream(file);
BOMInputStream uin = new BOMInputStream(fis, enc);
enc = uin.getCharset(); // check and skip possible BOM bytes
读取带BOM头的流内容的Reader,如果非bom的流或无法识别的编码,则默认UTF-8
BOM定义:http://www.unicode.org/unicode/faq/utf_bom.html
00 00 FE FF = UTF-32, big-endian
FF FE 00 00 = UTF-32, little-endian
EF BB BF = UTF-8
FE FF = UTF-16, big-endian
FF FE = UTF-16, little-endian
使用:
FileInputStream fis = new FileInputStream(file);
BomReader uin = new BomReader(fis);
布尔转换器
Boolean类型相关工具类
边界对象,描述具有特定上界或下界的单侧无界的区间。
日期范围
有边界限制的集合,边界集合有最大容量限制
指定边界大小的List
通过指定边界,可以限制List的最大容量
有界优先队列
按照给定的排序规则,排序元素,当队列满时,按照给定的排序规则淘汰末尾元素(去除末尾元素)
参考Guava的Range实现,用于描述作为上下界的两个
Bound实例围成的一段区间。
作为Predicate使用时,可检验指定值是否在区间中,即指定值是否同时满足上下界的Bound.test(T)方法。边界区间的操作工具,如子区间、合并区间等
边界类型枚举
内存中字节的集合.
不安全的游标
ByteBuffer 、CharBuffer工具类
此工具来自于 t-io 项目以及其它项目的相关部分收集
ByteBuffer的相关介绍见:https://www.cnblogs.com/ruber/p/6857159.html一种接收器,它在内部保存缓冲区,
以便调用者可以进行小的写操作没有性能损失
内部保存一个缓冲区,以便调用者可以在没有性能的情况下进行少量读取
它还允许客户端提前读取,在消费之前进行必要的缓冲输入
建造者模式接口定义
类型: 业务异常
由字节数组段组成的不可变字节字符串 该类的存在是为了实现
缓冲区的有效快照 它被实现为一个段数组,加上一个目录
两个半部分,描述段如何组成这个字节字符串
对数字和字节进行转换。
假设数据存储是以大端模式存储的:
byte: 字节类型 占8位二进制 00000000
char: 字符类型 占2个字节 16位二进制 byte[0] byte[1]
int : 整数类型 占4个字节 32位二进制 byte[0] byte[1] byte[2] byte[3]
long: 长整数类型 占8个字节 64位二进制 byte[0] byte[1] byte[2] byte[3] byte[4] byte[5]
long: 长整数类型 占8个字节 64位二进制 byte[0] byte[1] byte[2] byte[3] byte[4] byte[5] byte[6] byte[7]
float: 浮点数(小数) 占4个字节 32位二进制 byte[0] byte[1] byte[2] byte[3]
double: 双精度浮点数(小数) 占8个字节 64位二进制 byte[0] byte[1] byte[2] byte[3] byte[4]byte[5] byte[6] byte[7]
Byte Order Mark (BOM) 头描述
BOM定义:http://www.unicode.org/unicode/faq/utf_bom.html
EF BB BF = UTF-8
FE FF = UTF-16BE, big-endian
FF FE = UTF-16LE, little-endian
00 00 FE FF = UTF-32BE, big-endian
FF FE 00 00 = UTF-32LE, little-endian
基于byte[]的资源获取器
注意:此对象中getUrl方法始终返回null
不可变的字节序列
缓存接口
缓存工具类
缓存监听,用于实现缓存操作时的回调监听,例如缓存对象的移除事件等
缓存对象
AbstractCache 的CacheObj迭代器.AbstractCache 的值迭代器.日期计算类
数学表达式计算工具类
针对
Calendar 对象封装工具类日期转换器
调用者接口
可以通过此接口的实现类方法获取调用者、多级调用者以及判断是否被调用
调用者。可以通过此类的方法获取调用者、多级调用者以及判断是否被调用
驼峰Key风格的LinkedHashMap
对KEY转换为驼峰,get("int_value")和get("intValue")获得的值相同,put进入的值也会被覆盖
驼峰Key风格的Map
对KEY转换为驼峰,get("int_value")和get("intValue")获得的值相同,put进入的值也会被覆盖
忽略大小写的LinkedHashMap
对KEY忽略大小写,get("Value")和get("value")获得的值相同,put进入的值也会被覆盖
忽略大小写的Map
对KEY忽略大小写,get("Value")和get("value")获得的值相同,put进入的值也会被覆盖
忽略大小写的
TreeMap
对KEY忽略大小写,get("Value")和get("value")获得的值相同,put进入的值也会被覆盖强转转换器
转换工具类,提供集合、Map等向上向下转换工具
责任链接口
字符转换器
char[]包装,提供zero-copy的数组操作
字符查找器
查找指定字符在字符串中的位置信息
字符工具类
部分工具来自于Apache Commons系列
区间字符串替换,指定区间,将区间中的所有字符去除,替换为指定的字符,字符重复次数为区间长度,即替换后字符串长度不变
此方法使用
String.codePoints()完成拆分替换CharSequence 相关类封装,包括但不限于:
字符串补充前缀或后缀:addXXX
字符串补充长度:padXXX
字符串包含关系:containsXXX
字符串默认值:defaultIfXXX
字符串查找:indexOf
字符串判断以什么结尾:endWith
字符串判断以什么开始:startWith
字符串匹配:equals
字符串格式化:format
字符串去除:removeXXX
字符串重复:repeat
获取子串:sub
去除两边的指定字符串(只去除一次):strip
去除两边的指定所有字符:trim
去除两边的指定所有字符包装和去除包装:wrap
CharSequence资源,字符串做为资源字符集工具类
编码对象转换器
编码探测器
字符串检查工具类,提供字符串的blank和empty等检查
empty定义:
null or 空字符串:""
blank定义:null or 空字符串:"" or 空格、全角空格、制表符、换行符,等不可见字符
自定义加入前检查的
LinkedBlockingQueue,给定一个检查函数,在加入元素前检查此函数
原理是通过Runtime#freeMemory()获取剩余内存,当剩余内存低于指定的阈值时,不再加入。校验码工具
童限(从出生到起运的时间段)
童限信息
童限计算接口
元亨利贞的童限计算
数字转中文类
包括:
中文数字或金额解析类
公民身份号码(Citizen Identification Number),参考GB11643-1999标准。
1-2位: 2位省份代码。
3-4位: 2位城市代码。
5-6位: 2位区县代码。
7-14位: 8位数字出生日期码。
15-17位:3位数字顺序码。第17位奇数表示男性,偶数表示女性
18位: 1位数字校验码。校检码可以是0~9的数字,有时也用X表示
循环缓冲区
循环缓冲区
身份证相关工具类,参考标准:GB 11643-1999
标准描述见:http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=080D6FBF2BB468F9007657F26D60013E
Google发布的Hash计算算法:CityHash64 与 CityHash128。
它们分别根据字串计算 64 和 128 位的散列值。这些算法不适用于加密,但适合用在散列表等处。
类转换器
将类名转换为类,默认初始化这个类(执行static块)
类工具类
ClassPath单一资源访问类
传入路径path必须为相对路径,如果传入绝对路径,Linux路径会去掉开头的“/”,而Windows路径会直接报错。
传入的path所指向的资源必须存在,否则报错
类扫描器
候
七十二候
Clob转String
克隆异常
Unicode字符遍历器
参考:http://stackoverflow.com/a/21791059/6030888
各种集合类转换器
集合运算,包括:
求集合的并集
求集合的唯一并集
求集合的完全并集
求集合的交集
求集合的差集
集合的stream操作封装
Collection检查工具类,提供字对象的blank和empty等检查
empty定义:
null or 空字对象:""
blank定义:null or 空字对象:"" or 空格、全角空格、制表符、换行符,等不可见字符
MultiValueMap的通用实现,可视为值为Collection集合的Map集合。
构建时指定一个工厂方法用于生成原始的Map集合,然后再指定一个工厂方法用于生成自定义类型的值集合。
当调用MultiValueMap中格式为“putXXX”的方法时,将会为key创建值集合,并将key相同的值追加到集合中可变的汇聚操作
Collector 相关工具封装集合相关工具类
此工具方法针对
Collection或Iterable及其实现类封装的工具颜色工具类
组合,即C(n, m)
排列组合相关类 参考:http://cgs1999.iteye.com/blog/2327664
组合注解 对JDK的原生注解机制做一个增强,支持类似Spring的组合注解。
核心实现使用了递归获取指定元素上的注解以及注解的注解,以实现复合注解的获取。
组合BloomFilter 实现
1.构建hash算法
2.散列hash映射到数组的bit位置
3.验证
此实现方式可以指定Hash算法
比较器链。此链包装了多个比较器,最终比较结果按照比较器顺序综合多个比较器结果
按照比较器链的顺序分别比较,如果比较出相等则转向下一个比较器,否则直接返回
此类copy from Apache-commons-collections
比较工具类
两个函数的叠加函数.
复合转换器,融合了所有支持类型和自定义类型的转换规则
带有计算属性的遍历器
通过继承此抽象遍历器,实现
ComputeIterator.computeNext()计算下一个节点,即可完成节点遍历
当调用ComputeIterator.hasNext()时将此方法产生的节点缓存,直到调用ComputeIterator.next()取出
当无下一个节点时,须返回null表示遍历结束高并发测试工具类
通过
SafeConcurrentHashMap实现的线程安全HashSetA hash table supporting full concurrency of retrievals, adjustable expected
concurrency for updates, and a maximum capacity to bound the map by.
A builder that creates
ConcurrentLinkedHashMap instances.命令行(控制台)工具方法类
此类主要针对
System.out 和 System.err 做封装。控制台打印表格工具
星座
jdk8中如果直接调用
MethodHandles.lookup()获取到的MethodHandles.Lookup
在调用findSpecial和unreflectSpecial时会出现权限不够问题,抛出"no private access for invokespecial"异常
所以通过反射创建MethodHandles.Lookup解决该问题。业务常量
可序列化的Consumer
基础输出封装
类型转换器
日期转换
类型转换接口函数,根据给定的值和目标类型,由用户自定义转换规则。
类型: 转换异常
坐标系转换相关工具类,主流坐标系包括:
WGS84坐标系:即地球坐标系,中国外谷歌地图
GCJ02坐标系:即火星坐标系,高德、腾讯、阿里等使用
BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系。百度、搜狗等使用
坐标经纬度
拷贝接口
设置返回元素的类型
属性拷贝选项
包括:
1、限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类
2、是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
3、忽略的属性列表,设置一个属性列表,不拷贝这些属性值
文件拷贝的FileVisitor实现,用于递归遍历拷贝目录,此类非线程安全
此类在遍历源目录并复制过程中会自动创建目标目录中不存在的上级目录。
CRC16 循环冗余校验码(Cyclic Redundancy Check)实现,默认IBM算法
CRC16_ANSI
CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或
0x8408是0x1021按位颠倒后的结果。
CRC16_CCITT_FALSE:多项式x16+x12+x5+1(0x1021),初始值0xFFFF,低位在后,高位在前,结果与0x0000异或
CRC16 Checksum,用于提供多种CRC16算法的通用实现
通过继承此类,重写update和reset完成相应算法。
CRC16_DNP:多项式x16+x13+x12+x11+x10+x8+x6+x5+x2+1(0x3D65),初始值0x0000,低位在前,高位在后,结果与0xFFFF异或
0xA6BC是0x3D65按位颠倒后的结果
CRC16_IBM:多项式x16+x15+x2+1(0x8005),初始值0x0000,低位在前,高位在后,结果与0x0000异或
0xA001是0x8005按位颠倒后的结果
CRC16_MAXIM:多项式x16+x15+x2+1(0x8005),初始值0x0000,低位在前,高位在后,结果与0xFFFF异或
0xA001是0x8005按位颠倒后的结果
CRC-16 (Modbus)
CRC16_MODBUS:多项式x16+x15+x2+1(0x8005),初始值0xFFFF,低位在前,高位在后,结果与0x0000异或
0xA001是0x8005按位颠倒后的结果
CRC16_USB:多项式x16+x15+x2+1(0x8005),初始值0xFFFF,低位在前,高位在后,结果与0xFFFF异或
0xA001是0x8005按位颠倒后的结果
CRC16_X25:多项式x16+x12+x5+1(0x1021),初始值0xffff,低位在前,高位在后,结果与0xFFFF异或
0x8408是0x1021按位颠倒后的结果。
CRC-CCITT (XModem)
CRC16_XMODEM:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在后,高位在前,结果与0x0000异或
CRC8 循环冗余校验码(Cyclic Redundancy Check)实现
代码来自:https://github.com/BBSc0der
统一社会信用代码(GB32100-2015)工具类
标准见:GB 32100-2015
三证合一、一照一码政策之后,纳税人识别号 == 统一社会信用代码
政策见国家税务总局:“三证合一”后纳税人识别号有何变化?
规则:
Crockford`s Base32实现
来自:https://gist.github.com/markov/5206312
类型: 定时任务执行异常
类型: 加解密异常
区域文化
货币
Currency 转换器全局自定义格式
用于定义用户指定的日期格式和输出日期的关系
自定义键的Map,默认HashMap实现
数据大小,可以将类似于'12MB'表示转换为bytes长度的数字
此类来自于:Spring-framework
数据单位封装
此类来自于:Spring-framework
DateBuilder类用于构建和操作日期
该类提供了多个方法来设置年、月、日等日期字段,以及获取构建的日期对象
它是不可变的,因此每个设置方法都会返回一个新的DateBuilder实例
日期转换器
工具类异常
日期时间工具类
java.sql.*日期时间相关封装
考虑到JDK9+模块化后,java.sql并非默认引入模块,因此将相关内容单独封装为工具,避免类找不到问题。日期解析接口,用于解析日期字符串为
Date 对象
Thanks to Apache Commons Lang 3.5日期信息获取接口
大运(10年1大运)
解码接口
默认的童限计算
默认日期基本信息类,包括:
DefaultDatePrinter.getPattern()返回null
DefaultDatePrinter.getTimeZone() ()}返回TimeZone.getDefault()
DefaultDatePrinter.getLocale() ()} ()}返回Locale.getDefault()
默认的简单转换器
默认对象实例化器
通过传入对象类型和构造函数的参数,调用对应的构造方法创建对象。
片段默认实现
Deflate算法
Deflate是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
这种流体的强冲刷可能导致压缩降低 每一个
调用
DeflaterSink.flush()立即压缩所有当前缓存的数据延迟观察者
使用此观察者通过定义一定的延迟时间,解决
WatchService多个modify的问题
在监听目录或文件时,如果这个文件有修改操作,会多次触发modify方法。
此类通过维护一个Set将短时间内相同文件多次modify的事件合并处理触发,从而避免以上问题。
注意:延迟只针对modify事件,其它事件无效ExecutorService代理
委派的资源加载器
删除操作的FileVisitor实现,用于递归遍历删除文件夹
依赖异常
开发环境
表示当前方法禁止用于生产环境,仅可用于开发测试
字典对象,扩充了LinkedHashMap中的方法
北斗九星
方位
类型: 禁用异常
始终为空的队列,所有新增节点都丢弃
DocumentBuilder 工具类三伏
三伏天
借鉴自StreamEx
Duration对象转换器建除十二值神
动态Bean,通过反射对Bean的相关方法做操作
支持Map和普通Bean和Collection
DynaBean值提供者
地支
单元素的扩展流实现。基于原生Stream进行了封装和增强。
作者经对比了vavr、eclipse-collection、stream-ex以及其他语言的api,结合日常使用习惯,进行封装和拓展
Stream为集合提供了一些易用api,它让开发人员能使用声明式编程的方式去编写代码。
建造者
黄道黑道
八字
五行
空的流
空节点
此OutputStream写出数据到/dev/null,即忽略所有数据
来自 Apache Commons io
编码接口
将浮点数类型的number转换成英语的表达方式
WrappedStream接口的公共实现,用于包装并增强一个已有的流实例Entity 实体
A class that can determine the selector of an entry.
无泛型检查的枚举转换器
Enumeration对象转Iterator对象枚举元素通用接口,在自定义枚举上实现此接口可以用于数据转换
数据库保存时建议保存 intVal()而非ordinal()防备需求变更
枚举工具类
枚举元素通用接口,在自定义枚举上实现此接口可以用于数据转换
数据库保存时建议保存 intVal()而非ordinal()防备需求变更
对齐方式枚举
节日类型
FTP连接模式
见:https://www.cnblogs.com/huhaoshida/p/5412615.html
渐变方向
脱敏类型
修饰符
命名模式
图片缩略类型
图片缩略模式
异常信息处理
系统响应码
异常信息处理
此类未找到实现的情况下,采用默认实现
可以根据不同业务需求,重写方法实现对应业务逻辑即可
项目中可通过SPI形式接入
例:META-INF/services/org.miaixz.bus.core.basics.service.ErrorService
org.miaixz.bus.xxx.BusinessErrorService
......转义和反转义工具类Escape / Unescape
escape采用ISO Latin字符集对指定的字符串进行编码。
所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。
异常工具类
Windows 资源管理器风格字符串比较器
此比较器模拟了 Windows 资源管理器的文件名排序方式,可得到与其相同的排序结果。
基于快速缓冲FastByteBuffer的OutputStream,随着数据的增长自动扩充缓冲区
可以通过
FastByteArrayOutputStream.toByteArray()和 FastByteArrayOutputStream.toString()来获取数据
FastByteArrayOutputStream.close()方法无任何效果,当流被关闭后不会抛出IOException
这种设计避免重新分配内存块而是分配新增的缓冲区,缓冲区不会被GC,数据也不会被拷贝到其他缓冲区。代码移植自blade
快速缓冲,将数据存放在缓冲集中,取代以往的单一数组
SimpleDateFormat 的线程安全版本,用于解析日期字符串并转换为 Date 对象SimpleDateFormat 的线程安全版本,用于将 Date 格式化输出
Thanks to Apache Commons Lang 3.5Inner class defining a numeric rule.
规则
快速字符串读取,相比jdk的StringReader非线程安全,速度更快。
借助
StringBuilder 提供快读的字符串写出,相比jdk的StringWriter非线程安全,速度更快。ThreadLocal 的一个特殊变体
当从 SpecificThread 访问时,可产生更高的访问性能。
SpecificThread 使用数组中的常量索引(而不是使用哈希码和哈希表)来查找变量。
虽然看似非常微妙,但它比使用哈希表具有轻微的性能优势,并且在频繁访问时很有用。不会抛出IOExceptions的接收器,
即使底层接收器抛出了IOExceptions
逐日胎神
地支六甲胎神(《地支六甲胎神歌》子午二日碓须忌,丑未厕道莫修移。寅申火炉休要动,卯酉大门修当避。辰戌鸡栖巳亥床,犯着六甲身堕胎。)
天干六甲胎神(《天干六甲胎神歌》甲己之日占在门,乙庚碓磨休移动。丙辛厨灶莫相干,丁壬仓库忌修弄。戊癸房床若移整,犯之孕妇堕孩童。)
逐月胎神(正十二月在床房,二三九十门户中,四六十一灶勿犯,五甲七子八厕凶。)
Bean字段排序器
参阅feilong-core中的PropertyComparator
反射中
Field字段工具类,包括字段获取和字段赋值。字段反射类
此类持有类中字段的缓存,如果字段在类中修改,则需要手动调用clearCaches方法清除缓存。
日期场景属性
工具类,提供格式化字符串很多,但是对于具体什么含义,不够清晰,这里进行说明:
常见日期格式模式字符串:
yyyy-MM-dd 示例:2022-08-05
yyyy年MM月dd日 示例:2022年08月05日
yyyy-MM-dd HH:mm:ss 示例:2022-08-05 12:59:59
yyyy-MM-dd HH:mm:ss.SSS 示例:2022-08-05 12:59:59.559
yyyy-MM-dd HH:mm:ss.SSSZ 示例:2022-08-05 12:59:59.559+0800【东八区中国时区】、2022-08-05 04:59:59.559+0000【冰岛0时区】, 年月日 时分秒 毫秒 时区
yyyy-MM-dd HH:mm:ss.SSSz 示例:2022-08-05 12:59:59.559UTC【世界标准时间=0时区】、2022-08-05T12:59:59.599GMT【冰岛0时区】、2022-08-05T12:59:59.599CST【东八区中国时区】、2022-08-23T03:45:00.599EDT【美国东北纽约时间,-0400】 ,年月日 时分秒 毫秒 时区
yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 示例:2022-08-05T12:59:59.559Z, 其中:''单引号表示转义字符,T:分隔符,Z:一般指UTC,0时区的时间含义
yyyy-MM-dd'T'HH:mm:ss.SSSZ 示例:2022-08-05T11:59:59.559+0800, 其中:Z,表示时区
yyyy-MM-dd'T'HH:mm:ss.SSSX 示例:2022-08-05T12:59:59.559+08, 其中:X:两位时区,+08表示:东8区,中国时区
yyyy-MM-dd'T'HH:mm:ss.SSSXX 示例:2022-08-05T12:59:59.559+0800, 其中:XX:四位时区
yyyy-MM-dd'T'HH:mm:ss.SSSXXX 示例:2022-08-05T12:59:59.559+08:00, 其中:XX:五位时区
yyyy-MM-dd'T'HH:mm:ss 示例:2022-08-05T12:59:59+08
yyyy-MM-dd'T'HH:mm:ssXXX 示例:2022-08-05T12:59:59+08:00
yyyy-MM-dd'T'HH:mm:ssZ 示例:2022-08-05T12:59:59+0800
yyyy-MM-dd'T'HH:mm:ss'Z' 示例:2022-08-05T12:59:59Z
EEE MMM dd HH:mm:ss z yyyy 示例:周五 8月 05 12:59:00 UTC+08:00 2022
EEE MMM dd HH:mm:ss zzz yyyy 示例:周五 8月 05 12:59:00 UTC+08:00 2022,其中z表示UTC时区,但:1~3个z没有任何区别
EEE, dd MMM yyyy HH:mm:ss z 示例:周五, 05 8月 2022 12:59:59 UTC+08:00
Bean字段排序器
FIFO(first in first out) 先进先出缓存.
文件追加器
持有一个文件,在内存中积累一定量的数据后统一追加到文件
此类只有在写入文件时打开文件,并在写入结束后关闭之。因此此类不需要关闭
在调用append方法后会缓存于内存,只有超过容量后才会一次性写入文件,因此内存中随时有剩余未写入文件的内容,在最后必须调用flush方法将剩余内容刷入文件
FileChannel 数据拷贝封装文件工具类
文件资源加载器
文件类型魔数封装
文件读写模式,常用于RandomAccessFile
文件名相关工具类
FileObject 资源包装文件读取器
文件内容跟随器,实现类似Linux下"tail -f"命令功能
命令行打印的行处理器
文件类型判断工具类
文件包装器,扩展文件对象
文件写入器
资源过滤器
过滤器工具类
保证ExecutorService在对象回收时正常结束
字符串查找接口,通过调用
Finder.start(int)查找开始位置,再调用Finder.end(int)找结束位置由一个有限值构成的边界
固定大小的
LinkedHashMap 实现
注意此类非线程安全,由于LinkedHashMap.get(Object)操作会修改链表的顺序结构,因此也不可以使用读写锁。类型: 权限异常
基于多个
TreeEntry构成的、彼此平行的树结构构成的森林集合。FastFormat 是一个线程安全的
SimpleDateFormat 实现。日期格式化器缓存
时长格式化器,用于格式化输出两个日期相差的时长
根据
FormatPeriod.Level不同,调用FormatPeriod.format()方法后返回类似于:
XX小时XX分XX秒
XX天XX小时
XX月XX天XX小时
格式化等级枚举
日期格式化输出接口
日期格式化和解析
yyyy-MM-dd
HH:mm:ss
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss.SSSSSS
yyyy-MM-dd HH:mm:ss.SSSSSSSSS
yyyy-MM-dd'T'HH:mm:ss.SSSZ等等,支持毫秒、微秒和纳秒等精确时间
小运
匹配到的单词,包含单词,text中匹配单词的内容,以及匹配内容在text中的下标,
下标可以用来做单词的进一步处理,如果替换成**
指定函数排序器
基于Hash函数方法的
BloomFilter自定义函数Key风格的Map
自定义键值函数风格的Map
常用Lambda函数封装
提供常用对象方法的Lambda包装,减少Lambda初始化时间。
可序列化的Function
寿星天文历工具
性别相关类
AnnotationMapping的基本实现,仅仅是简单包装了注解对象通用Builder
参考: 一看就会的java8通用Builder
全局缓存清理定时器池,用于在需要过期支持的缓存对象中超时任务池
全局公共线程池
此线程池是一个无限线程池,即加入的线程不等待任何线程,直接执行
神煞
支持处理无向图结构的
Map,本质上是基于SetValueMap实现的邻接表基于分组的Get接口
用来标识每个需要加锁的状态变量以及保护该变量的锁
有助于代码的维护与审查,以及一些自动化的分析工具找到潜在的安全性错误
GZIP是用于Unix系统的文件压缩
gzip的基础是DEFLATE
这相当于使用
Deflater同步刷新选项
该类不提供任何部分刷新机制 为获得最佳性能,
只在应用程序行为需要时调用GzipSink.flush()解压读取数据
Hash计算接口
Hash计算接口
Hash计算接口
Hashids 协议实现,以实现:
生成简短、唯一、大小写敏感并无序的hash值
自然数字的Hash值
可以设置不同的盐,具有保密性
可配置的hash长度
递增的输入产生的输出无法预测
Hash算法大全
推荐使用FNV1算法
天干
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制,一般用数字0到9和字母A到F表示(其中:A~F即10~15)。
例如十进制数57,在二进制写作111001,在16进制写作39。
像java,c这样的语言为了区分十六进制和十进制数值,会在十六进制数的前面加上 0x,比如0x20是十进制的32,而不是十进制的20
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制,一般用数字0到9和字母A到F表示(其中:A~F即10~15)。
例如十进制数57,在二进制写作111001,在16进制写作39。
像java,c这样的语言为了区分十六进制和十进制数值,会在十六进制数的前面加上 0x,比如0x20是十进制的32,而不是十进制的20
此工具类为16进制组合工具类,除了继承
Hex实现编码解码外,提供其它转换类和识别类工具。表示一组处于在层级结构中具有关联关系的
AnnotatedElement,创建实例时,
将扫描指定AnnotatedElement的层级结构中的所有AnnotatedElement,
并将其包装为MetaAnnotatedElement。
eg:
若存在元素A有对应父类与父接口B,C,
则根据A生成的HierarchicalAnnotatedElements实例将同时包含A,B,C,
该实例同时支持对这三个实例上直接声明的注解,以及这些注解的元注解进行访问。用于迭代层级结构(比如树或图)的迭代器,
支持
广度优先与深度优先两种遍历模式。
迭代器仅适用于访问层级结构,因此不支持Iterator.remove()方法。
要构建树或者操作数,请参见BeanTree或TreeKit。高效替换器,通过查找指定关键字,替换对应的值
基于AC自动机算法实现,需要被替换的原字符串越大,替换的键值对越多,效率提升越明显
注意: 如果需要被替换的关键字出现交叉,最先匹配中的关键字会被替换
1、"abc","ab" 会优先替换"ab"
2、"abed","be" 会优先替换"abed"
3、"abc", "ciphers" 会优先替换"abc"
法定假日(自2001-12-29起)
HTML4的ESCAPE
参考:Commons Lang3
HTML4的UNESCAPE
HTTP 相关常量
HTTP资源,用于自定义表单数据,可自定义Content-Type
语言枚举
ID生成器工具类,此工具类中主要封装:
属性忽略注解,使用此注解的字段等会被忽略,主要用于Bean拷贝、Bean转Map等
此注解应用于字段时,忽略读取和设置属性值,应用于setXXX方法忽略设置值,应用于getXXX忽略读取值
类型: 非法路径
不可变类
简单的轮询选择器
按照数组的顺序正序排列,数组的元素位置决定了对象的排序先后
默认的,如果参与排序的元素并不在数组中,则排序在前(可以通过atEndIfMiss设置)
基字符串模板-基于下标的占位符 SectionBuffer
使用DEFLATE 解压缩从另一个源读取的数据的源。
InflaterInputStream包装实现,实现"deflate"算法解压
参考:org.apache.hc.client5.http.entity.DeflateInputStream注释实现类的成员(构造函数、方法和字段)
基于
InputStream的资源获取器
注意:此对象中getUrl方法始终返回null实例化对象的接口
1.
按照指定类型顺序排序,对象顺序取决于对象对应的类在数组中的位置
实例化工厂类
单例类
提供单例对象的统一管理,当调用get方法时,如果对象池中存在此对象,返回此对象,否则创建新对象返回
规范化表示形式封装
所谓规范化,即当两个对象equals时,规范化的对象则可以实现==
此包中的相关封装类似于
String.intern()类型: 内部处理异常
规范化对象生成工具
基于哈希表的
IntMap接口实现。这个实现提供了所有可选的map操作,并允许null值。
IntHashMap 类大致相当于HashMap,除了它使用int作为它的键。
这个类不保证映射的顺序;特别是,它不能保证顺序在一段时间内保持不变。类型: 无效的参数
Invoker接口定义了调用目标对象的方法的规范。
它允许动态地调用方法,增强了代码的灵活性和扩展性。
参考:org.apache.ibatis.reflection.invoker.Invoker
IO拷贝抽象,可自定义包括缓存、进度条等信息
此对象非线程安全
IO工具类
IO工具类只是辅助流的读写,并不负责关闭流。原因是流可能被多次读写,读写关闭后容易造成问题。
IPV4地址工具类
名词解释:
ip字符串:点分十进制,形如:xxx.xxx.xxx.xxx
ip的Long类型:有效位32位,每8位可以转为一个十进制数,例如:0xC0A802FA, 转为点分十进制是:192.168.2.250
掩码地址:点分十进制,例如:255.255.255.0
掩码位:int类型,例如 24, 它代表的掩码地址为:255.255.255.0;掩码位和掩码地址的相互转换,请使用
MaskBit
CIDR:无类域间路由,形如:xxx.xxx.xxx.xxx/掩码位,192.168.1.101/24
全量地址:区间内所有ip地址,包含区间两端
可用地址:区间内所有ip地址,但是不包含区间两端
IPv6工具类
无限有序流的Spliterator
Iterator检查工具类,提供字对象的blank和empty等检查
empty定义:
null or 空字对象:""
blank定义:null or 空字对象:"" or 空格、全角空格、制表符、换行符,等不可见字符
外部Jar的类加载器
Jar包资源加载器
Jar包资源对象
JDK的
Proxy相关工具类封装儒略日
kotlin.reflect.KCallable方法包装调用类
kotlin.reflect.jvm.internal.KClassImpl包装
Ketama算法,用于在一致性Hash中快速定位服务器位置
系统属性名称常量池
封装了包括Java运行时环境信息、Java虚拟机信息、Java类信息、OS信息、用户信息等
Kotlin Bean转换器,支持:
Kotlin反射包装相关工具类
kotlin.reflect.KParameter实例表示类
通过反射获取Kotlin中KParameter相关属性值
表示以 LAB 形式存储的颜色
L: 亮度
a: 正数代表红色,负端代表绿色
b: 正数代表黄色,负端代表蓝色
用于在输出到CLI表或Excel/CSV等时为字段/getter提供标签.
以类似反射的方式动态创建Lambda,在性能上有一定优势,同时避免每次调用Lambda时创建匿名内部类
Lambda相关工具类
存放lambda信息
此类是
SerializedLambda信息的扩充和补充类,包括:
实例化后的对象方法参数类型,一般用于方法引用
九野
将一个单例类标记为惰性初始化,
或者标记为不受立即加载影响的方法(例如,AppConfig中的方法)
函数式懒加载加载器
传入用于生成对象的函数,在对象需要使用时调用生成对象,然后抛弃此生成对象的函数。
此加载器常用于对象比较庞大而不一定被使用的情况,用于减少启动时资源占用问题
继承自
LazyLoader,如何实现多线程安全,由LazyLoader完成。懒加载加载器
在load方法被调用前,对象未被加载,直到被调用后才开始加载
此加载器常用于对象比较庞大而不一定被使用的情况,用于减少启动时资源占用问题
此加载器使用双重检查(Double-Check)方式检查对象是否被加载,避免多线程下重复加载或加载丢失问题
字符串长度比较器,短在前
固定长度查找器
给定一个长度,查找的位置为from + length,一般用于分段截取
LFU(least frequently used) 最少使用率缓存
根据使用次数来判定对象是否被持续缓存
使用率是通过访问次数计算的。
当缓存满时清理过期对象。
清理后依旧满的情况下清除最少访问(访问计数最小)的对象并将其他对象的访问数减去这个最小访问数,以便新对象进入后可以公平计数。
使用LFU缓存文件,以解决频繁读取文件引起的性能问题
这是避免GC搅动和零填充所必需的
这个池是一个线程安全的静态单例
限制读取最大长度的
FilterInputStream实现行数计数器
将Reader包装为一个按照行读取的Iterator
此对象遍历结束后,应关闭之,推荐使用方式:
行读取器,类似于BufferedInputStream,支持多行转义,规则如下:
支持'\n'和'\r\n'两种换行符,不支持'\r'换行符
如果想读取转义符,必须定义为'\\'
多行转义后的换行符和空格都会被忽略
换行符枚举
换行符包括:
行处理的Watcher实现
An element that is linked on the
Deque.Linked list implementation of the
Deque interface where the link
pointers are tightly integrated with the element.ForestMap的基本实现。Map.Entry包装类树节点
List相关工具类
列表节点
[num0,num1,num2...]模式或者['key0','key1']模式
列表类型的服务加载器,用于替换JDK提供的
ServiceLoader
相比JDK,增加了:
可选服务存储位置(默认位于META-INF/services/)。
可自定义编码。
可自定义加载指定的服务实例。
可自定义加载指定的服务类,由用户决定如何实例化(如传入自定义构造参数等)。
提供更加灵活的服务加载机制,当选择加载指定服务时,其它服务无需加载。
值作为集合List的Map实现,通过调用putValue可以在相同key时加入多个值,多个值用集合表示
列表包装类
提供列表包装,用于在执行列表方法前后自定义处理逻辑
字符串模板-固定文本 SectionBuffer
资源加载器,充分采用惰性加载的逻辑,
让资源的加载延后到
Enumeration.hasMoreElements()
调用时,避免无用的提前全部预加载对象加载抽象接口
通过实现此接口自定义实现对象的加载方式,例如懒加载机制、多线程加载等
资源加载器工具类
自定义语言环境 String 比较,可为自然语言文本构建搜索和排序例程。
Locale对象转换器
只提供String转换支持锁相关类
MethodHandles.Lookup方法工厂,用于创建MethodHandles.Lookup对象
MethodHandles.Lookup是一个方法句柄查找对象,用于在指定类中查找符合给定方法名称、方法类型的方法句柄。MethodHandles.Lookup工具
MethodHandles.Lookup是一个方法句柄查找对象,用于在指定类中查找符合给定方法名称、方法类型的方法句柄。查找替换器,通过查找指定关键字,替换对应的值
抽象的轮回
LRU (least recently used)最近最久未使用缓存
根据使用时间来判定对象是否被持续缓存
当对象被访问时放入缓存,当缓存满了,最久未被使用的对象将被移除。
此缓存基于LinkedHashMap,因此当被缓存的对象每被访问一次,这个对象的key就到链表头部。
这个算法简单并且非常快,他比FIFO有一个显著优势是经常使用的对象不太可能被移除缓存。
缺点是当缓存满时,不能被很快的访问。
使用LRU缓存文件,以解决频繁读取文件引起的性能问题
吉凶
Luhn算法,也称为“模10”算法,是一种简单的校验和(Checksum)算法,在ISO/IEC 7812-1中定义,校验步骤如下:
从右边第1个数字(校验数字)开始偶数位乘以2,如果小于10,直接返回,否则将个位数和十位数相加
把步骤1种获得的乘积的各位数字与原号码中未乘2的各位数字相加
如果步骤2得到的总和模10为0,则校验通过
农历日
农历传统节日(依据国家标准《农历的编算和颁行》GB/T 33661-2017)
时辰
农历月
农历季节
农历周
农历年
Jar包中manifest.mf文件获取和解析工具类
Map创建类
Map 转换器,通过预定义key和value的类型,实现:
Map 转 Map,key和value类型自动转换
Bean 转 Map,字段和字段值类型自动转换
Map的getXXX封装,提供针对通用型的value按照所需类型获取值
Map拼接器,可以拼接包括Map、Entry列表等。
Map相关工具类
类型: 数据操作异常
Map代理,提供各种getXXX方法,并提供默认值支持
键值对服务加载器,使用
Properties加载并存储服务
服务文件默认位于"META-INF/bus/"下,文件名为服务接口类全名。
内容类似于:Map属性拷贝到Bean中的拷贝器
Map属性拷贝到Map中的拷贝器
通过转换器将你的实体转化为TreeNodeMap节点实体 属性都存在此处,属性有序,可支持排序
Map检查工具类,提供字对象的blank和empty等检查
empty定义:
null or 空字对象:""
blank定义:null or 空字对象:"" or 空格、全角空格、制表符、换行符,等不可见字符
Map值提供者
Map包装类,通过包装一个已有Map实现特定功能。例如自定义Key的规则或Value规则
掩码位和掩码之间的Map对应
数据脱敏(Data Masking)工具类,对某些敏感信息(比如,身份证号、手机号、卡号、姓名、地址、邮箱等 )屏蔽敏感数据。
字符匹配查找器
查找满足指定
Predicate 匹配的字符所在位置,此类长用于查找某一类字符,如数字等数字工具类
对于精确值计算应该使用
BigDecimal
JDK7中BigDecimal(double val)构造方法的结果有一定的不可预知性,例如:HTTP 媒体类型
内存安全的
LinkedBlockingQueue,可以解决OOM问题。
原理是通过Runtime#freeMemory()获取剩余内存,当剩余内存低于指定的阈值时,不再加入。响应结果
注解元素映射,用于包装一个
AnnotatedElement,然后将被包装的元素上,
直接声明的注解以及这些注解的元组全部解析为ResolvedAnnotationMapping。
从而用于支持对元注解的访问操作。元注解
方法调用器,通过反射调用方法。
反射中
Method相关工具类,包括方法获取和方法执行jdk11中直接调用MethodHandles.lookup()获取到的MethodHandles.Lookup只能对接口类型才会权限获取方法的方法句柄MethodHandle。
如果是普通类型Class,需要使用jdk9开始提供的 MethodHandles#privateLookupIn(java.lang.Class, java.lang.invoke.MethodHandles.Lookup)方法.
方法匹配器工具类,用于基于各种预设条件创建方法匹配器。
方法反射相关操作类。
Apache 发布的MetroHash算法接口,是一组用于非加密用例的最先进的哈希函数。
除了卓越的性能外,他们还以算法生成而著称。
Apache 发布的MetroHash算法的128位实现,是一组用于非加密用例的最先进的哈希函数。
除了卓越的性能外,他们还以算法生成而著称。
Apache 发布的MetroHash算法的64位实现,是一组用于非加密用例的最先进的哈希函数。
除了卓越的性能外,他们还以算法生成而著称。
复合过滤器,实际上内部维护一个过滤器的
LinkedHashSet集合,提供添加/删除以及链式拼接的方法来混合多个子过滤器,该过滤器的具体逻辑由子类拓展日期修改器
用于实现自定义某个日期字段的调整,包括:
类修饰符
修改类型
单币种货币类,处理货币算术、币种和取整。
货币类中封装了货币金额和币种。目前金额在内部是long类型表示,
单位是所属币种的最小货币单位(对人民币是分)。
目前,货币实现了以下主要功能:
支持货币对象与double(float)/long(int)/String/BigDecimal之间相互转换。
货币类在运算中提供与JDK中的BigDecimal类似的运算接口,
BigDecimal的运算接口支持任意指定精度的运算功能,能够支持各种
可能的财务规则。
货币类在运算中也提供一组简单运算接口,使用这组运算接口,则在
精度处理上使用缺省的处理规则。
推荐使用Money,不建议直接使用BigDecimal的原因之一在于,
使用BigDecimal,同样金额和币种的货币使用BigDecimal存在多种可能
的表示,例如:new BigDecimal("10.5")与new BigDecimal("10.50")
不相等,因为scale不等。使得Money类,同样金额和币种的货币只有
一种表示方式,new Money("10.5")和new Money("10.50")应该是相等的。
不推荐直接使用BigDecimal的另一原因在于, BigDecimal是Immutable,
一旦创建就不可更改,对BigDecimal进行任意运算都会生成一个新的
BigDecimal对象,因此对于大批量统计的性能不够满意。Money类是
mutable的,对大批量统计提供较好的支持。
提供基本的格式化功能。
Money类中不包含与业务相关的统计功能和格式化功能。业务相关的功能
建议使用utility类来实现。
Money类实现了Serializable接口,支持作为远程调用的参数和返回值。
Money类实现了equals和hashCode方法。
月份枚举
与Calendar中的月份int值对应
莫尔斯电码的编码和解码实现
参考:https://github.com/TakWolf/Java-MorseCoder
文件移动操作的FileVisitor实现,用于递归遍历移动目录和文件,此类非线程安全
此类在遍历源目录并移动过程中会自动创建目标目录中不存在的上级目录。
多文件组合资源
此资源为一个利用游标自循环资源,只有调用
MultiResource.next() 方法才会获取下一个资源,使用完毕后调用MultiResource.reset()方法重置游标多资源组合资源
此资源为一个利用游标自循环资源,只有调用
MultiResource.next() 方法才会获取下一个资源,使用完毕后调用MultiResource.reset()方法重置游标Murmur3 32bit、64bit、128bit 哈希算法实现
此算法来自于:...
提供可变值类型接口
可变
boolean 类型可变
byte 类型可变
double 类型可变键和值的
Map.Entry实现,可以修改键和值可变
float 类型可变
int 类型可变
long 类型可变
Object可变二元组对象
可变
short 类型可变三元组对象
注解命名
字符串模板-有前后缀的变量占位符 SectionBuffer
有前后缀的字符串模板
构造器
线程创建工厂类
此工厂可选配置:
处理名称节点或序号节点,如:
name
1
命名规则封装,主要是针对驼峰风格命名、连接符命名等的封装
NanoId,一个小型、安全、对 URL友好的唯一字符串 ID 生成器,特点:
安全:它使用加密、强大的随机 API,并保证符号的正确分配
体积小:只有 258 bytes 大小(压缩后)、无依赖
紧凑:它使用比 UUID (A-Za-z0-9_~)更多的符号
Jar包资源加载器
网络相关工具
基于非确定性有穷自动机(NFA) 实现的多模匹配工具
数九
数九天
九星
128位数字表示,分为:
最高有效位(Most Significant Bit),64 bit(8 bytes)
最低有效位(Least Significant Bit),64 bit(8 bytes)
无缓存实现,用于快速关闭缓存
Bean路径节点接口
节点接口,提供节点相关的的方法定义
树配置属性相关
节点简单工厂
树节点解析器 可以参考
DefaultNodeParser无锁实现
账号密码形式的
Authenticator 实现系统时钟
高并发场景下System.currentTimeMillis()的性能问题的优化
System.currentTimeMillis()的调用比new一个普通对象要耗时的多(具体耗时高出多少我还没测试过,有人说是100倍左右)
System.currentTimeMillis()之所以慢是因为去跟系统打了一次交道
后台定时更新时钟,JVM退出时,线程自动回收
see: http://git.oschina.net/yu120/sequence
无限小的左边界
无限大的右边界
无锁的读写锁实现
默认常量
全局正则日期解析器
通过使用预定义或自定义的正则规则,解析日期字符串
类型: 无法找到方法
类型: 对象不存在
类型: 资源不存在
类型: 未初始化异常
线程不安全安全注解
null友好的比较器包装,如果nullGreater,则null > non-null,否则反之。
如果二者皆为null,则为相等,返回0。
如果二者都非null,则使用传入的比较器排序。
传入比较器为null,则看被比较的两个对象是否都实现了Comparable实现则调用Comparable.compareTo(Object)。
如果两者至少一个未实现,则视为所有元素相等。空类型表示
为了解决反射过程中,需要传递null参数,但是会丢失参数类型而设立的包装类
数字转换器
支持类型为:
java.lang.Byte
java.lang.Short
java.lang.Integer
java.util.concurrent.atomic.AtomicInteger
java.lang.Long
java.util.concurrent.atomic.AtomicLong
java.lang.Float
java.lang.Double
java.math.BigDecimal
java.math.BigInteger
数字解析器
用于将字符串解析为对应的数字类型,支持包括:
0开头的忽略开头的0
空串返回0
NaN返回0
其它情况按照10进制转换
.123形式返回0.123(按照小于0的小数对待)
数字检查器
形如'的反转义器
访问授权
对象创建器,用于自定义创建指定类型、指定参数的对象
也叫对象初始化器。
对象工厂接口,用于自定义对象创建、验证和销毁
来自:https://github.com/DanielYWoo/fast-object-pool/
MongoDB ID生成策略实现
ObjectId由以下几部分组成:
对象工具类,包括判空、克隆、序列化等操作
原数组相关操作见:
ArrayValidator.hasBlank(CharSequence...)、ArrayValidator.isAllBlank(CharSequence...)等等对象池接口,提供:
ObjectPool.borrowObject() 对象借出。
ObjectPool.returnObject(Poolable)对象归还。
对于对象池中对象维护,通过PoolConfig.getMaxIdle()控制,规则如下:
如果借出量很多,则不断扩容,直到达到PoolConfig.getMaxSize()
如果池对象闲置超出PoolConfig.getMaxIdle(),则销毁。
实际使用中,池中对象可能少于PoolConfig.getMinSize()
对象检查工具类,提供字对象的blank和empty等检查
empty定义:
null or 空字对象:""
blank定义:null or 空字对象:"" or 空格、全角空格、制表符、换行符,等不可见字符
字符串区域匹配器,用于匹配字串是头部匹配还是尾部匹配,亦或者是某个位置的匹配。
offset用于锚定开始或结束位置,正数表示从开始偏移,负数表示从后偏移
阴阳
Optional对象转换器复制jdk16中的Optional,以及进行了一点调整和新增,比jdk8中的Optional多了几个实用的函数
Optional对象转换器字段排序
排序
类型: 分页插件异常
不可变二元组对象
ParameterizedType 接口实现,用于重新定义泛型类型列表分区或分段
通过传入分区长度,将指定列表分区为不同的块,每块区域的长度相同(最后一块可能小于长度)
分区是在原List的基础上进行的,返回的分区是不可变的抽象列表,原列表元素变更,分区中元素也会变更。
参考:Guava的Lists#Partition
分批迭代工具,可以分批处理数据
比如调用其他客户的接口,传入的入参有限,需要分批
比如mysql/oracle用in语句查询,超过1000可以分批
比如数据库取出游标,可以把游标里的数据一批一批处理
分区对象池实现
分区可池化对象,此对象会同时持有原始对象和所在的分区
分局对象池配置
字符串转换器
文件复制封装
文件移动封装
文件删除封装
NIO中Path对象操作封装
常用正则表达式集合,更多正则见:
https://any86.github.io/any-rule/
正则查找器
通过传入正则表达式,查找指定字符串中匹配正则的开始和结束位置
正则相关工具类
常用正则请见
Validator模式匹配资源加载器
通过给定的日期格式解析日期时间字符串。
传入的日期格式会逐个尝试,直到解析成功,返回
Calendar对象,否则抛出DateException异常。类型: 支付异常
一个
Source,它可以窥视上游的BufferSource并允许读取和
展开缓冲数据而不使用它 这是通过请求额外的数据吗
如果需要,则复制上游源文件,如果需要,则从上游源文件的内部缓冲区复制
此源还维护其上游缓冲区的起始位置的快照
每次读取时验证 如果从上游缓冲区读取,则此源将变为
无效,在以后的读取中抛出IllegalStateException彭祖百忌
地支彭祖百忌
天干彭祖百忌
百分号编码(Percent-encoding), 也称作URL编码(URL encoding)。
百分号编码可用于URI的编码,也可以用于"application/x-www-form-urlencoded"的MIME准备数据。
PercentCodec构建器
由于PercentCodec本身应该是只读对象,因此将此对象的构建放在Builder中Period对象转换器月相
电话号码工具类,包括:
手机号码
400、800号码
座机号码
进程ID单例封装
第一次访问时调用
ManagementFactory.getRuntimeMXBean()获取PID信息,之后直接使用缓存值按照GBK拼音顺序对给定的汉字字符串排序
包名表达式资源加载器
一个简单的占位符解析器。给定占位符的左右边界符号以及转义符,
将允许把一段字符串中的占位符解析并替换为指定内容,支持指定转义符对边界符号进行转义。
插件
梅雨
梅雨天
池化对象
对象池配置,提供基本的配置项,包括:
最小池大小(初始大小)
最大池大小
最长等待时间
最长空闲时间
对象池分区
一个分区实际为一个小的对象池,持有一个阻塞队列。
初始化时创建
PoolConfig.getMinSize()个对象作为初始池对象.带有
ParsePosition的日期解析接口,用于解析日期字符串为 Date 对象尝试方式对象实例化器
通过判断类型或调用可能的构造,构建对象,支持:
原始类型
接口或抽象类型
枚举
数组
使用默认参数的构造方法
通过判断字符串的匹配,解析为日期
通过实现
Predicate.test(Object)方法判断字符串是否符合此解析器的规则,如果符合,则调用DateParser.parse(CharSequence)完成解析。一些
Predicate相关封装可序列化的Predicate
原始类型数组工具类
原始类型转换器
支持类型为:
byte
short
int
long
float
double
char
boolean
生产环境
表示当前方法性能安全性各方面达标,可以用于生产环境
属性描述,包括了字段、getter、setter和相应的方法执行
Bean属性排序器
支持读取Bean多层次下的属性
配置文件源
协议vs计划 它的名字是:
URL.getProtocol()
返回scheme (http, https, etc.),
而不是协议(http/1.1, spdy/3.1,等等) 请使用这个协议来识别它是如何被分割的
Httpd使用协议这个词来标识HTTP消息是如何构造的代理Socket工厂,用于创建代理Socket
Punycode是一个根据RFC 3492标准而制定的编码系统,主要用于把域名从地方语言所采用的Unicode编码转换成为可用于DNS系统的编码
参考:https://blog.csdn.net/a19881029/article/details/18262671
标识qualifier注解
季度枚举
进制转换工具类,可以转换为任意进制
把一个十进制整数根据自己定义的进制规则进行转换
主要应用一下情况:
根据ID生成邀请码,并且尽可能的缩短。并且不希望直接猜测出和ID的关联
短连接的生成,根据ID转成短连接,同样不希望被猜测到
数字加密,通过两次不同进制的转换,让有规律的数字看起来没有任何规律
....
列表分区或分段(可随机访问列表)
通过传入分区个数,将指定列表分区为不同的块,每块区域的长度均匀分布(个数差不超过1)
列表分区或分段(可随机访问列表)
通过传入分区长度,将指定列表分区为不同的块,每块区域的长度相同(最后一块可能小于长度)
分区是在原List的基础上进行的,返回的分区是不可变的抽象列表,原列表元素变更,分区中元素也会变更。
参考:Guava的Lists#RandomAccessPartition
随机工具类
随机选择器
范围生成器。根据给定的初始值、结束值和步进生成一个步进列表生成器
由于用户自行实现
Stepper来定义步进,因此Range本身无法判定边界(是否达到end),需在step实现边界判定逻辑。[start:end:step] 模式节点
Reader作为InputStream使用的实现。
参考:Apache Commons IOReader 包装原始流信息
原始缓冲流
Bean描述
包括Record自定义字段及对应方法,getter方法与字段名同名,不支持setter
Record类的转换器,支持:
java.lang.Record 相关工具类封装
来自于FastJSON2
使用
ReentrantLock保护的缓存,读写都使用悲观锁完成,主要避免某些Map无法使用读写锁的问题
例如使用了LinkedHashMap的缓存,由于get方法也会改变Map的结构,因此读写必须加互斥锁针对
Reference的接口定义,用于扩展功能
例如提供自定义的无需回收对象线程安全的ReferenceMap实现
Reference转换器引用类型
引用工具类,主要针对
Reference 工具化封装
主要封装包括:反射相关工具类
常用正则表达式字符
使用正则列表方式的日期解析器
通过定义若干的日期正则,遍历匹配到给定正则后,按照正则方式解析为日期
正则表达式过滤器
正则表达式资源加载器
对象检查工具类,提供字对象的blank和empty等检查
empty定义:
null or 空字对象:""
blank定义:null or 空字对象:"" or 空格、全角空格、制表符、换行符,等不可见字符
正则表达式和正则标识位的包装
基于类型注册的转换器,转换器默认提供一些固定的类型转换,用户可调用
RegisterConverter.putCustom(Type, Converter) 注册自定义转换规则基于注册的日期解析器,通过遍历列表,找到合适的解析器,然后解析为日期
默认的,可以调用
RegisterDateParser.INSTANCE使用全局的解析器,亦或者通过构造自定义独立的注册解析器线程拒绝策略枚举
如果设置了maxSize, 当总线程数达到上限, 会调用RejectedExecutionHandler进行处理,此枚举为JDK预定义的几种策略枚举表示
类型: IO相关异常
可重复注解收集器,用于从一个注解获得被它包含的可重复注解
RepeatableAnnotationCollector的基本实现自定义判断条件的实现,当解析注解属性时,将根据给定的判断条件,
确定该属性中是否含有可重复注解,收集器将返回所有匹配的属性中的可重复注解。
全量实现,当注解中存在有属性为注解数组,且该数组对应的注解类型被
Repeatable注解时,
认为该属性包含可重复注解。
收集器将返回所有符合上述条件的属性中的可重复注解。空实现
标准实现,当注解中有且仅有一个名为
value的属性时,
若该属性类型为注解数组,且该数组对应的注解类型被Repeatable注解,
则收集器将返回该属性中包括的可重复注解。支持可重复注解的增强
AnnotatedElement,
功能与MetaAnnotatedElement类似,但是存在下述差异:
限制以同一根注解延伸出的树结构上——而不是AnnotatedElement上——每种类型注解只能保留一个,
即当AnnotatedElement存在多个根注解有相同的元注解时,这些元注解会都会被扫描到;
支持扫描AnnotatedElement可重复注解,即当当前实例指定的RepeatableAnnotationCollector
支持从AnnotatedElement上直接声明的注解中获得可重复注解时,
则将会自动将其展开直到不为容器注解为止。
eg:
A上存在注解X,该注解是一个容器注解,内部可重复注解Y,
包含解析后,得到注解X与可重复注解Y,
同理,若存在X、Y、X的嵌套关系,则解析后获得全部三者;
由于上述机制,当通过实例的RepeatableMetaAnnotatedElement.getAnnotation(Class)或RepeatableMetaAnnotatedElement.getDeclaredAnnotation(Class)
方法获得指定类型注解时,若该类型注解存在多个,仅能尽可能获得最先被扫描到的那一个。字符串替换链,用于组合多个字符串替换逻辑
附加索引的传统文化
注解映射,用于包装并增强一个普通注解对象,
包装后的可以通过
getResolvedXXX获得注解对象或属性值,
可以支持属性别名与属性覆写的属性解析机制日期解析
资源接口定义
资源类加载器,可以加载任意类型的资源类
资源查找器
参考Spring的PathMatchingResourcePatternResolver,实现classpath资源查找,利用
AntPathMatcher筛选资源Resource资源工具类
资源加载器
数据结果
重试任务类
重试工具类
自定义功能请使用
RetryableTask类类型: 修饰IO异常
数字和罗马数字转换
RotN(rotate by N places),回转N位密码,是一种简易的替换式密码,也是过去在古罗马开发的凯撒加密的一种变体。
代码来自:https://github.com/orclight/jencrypt
将行的键作为主键的
Table实现
此结构为: 行=(列=值)可序列化的Runnable
系统运行时工具类,用于执行系统命令的工具
安全的ConcurrentHashMap实现
此类用于解决在JDK8中调用
ConcurrentHashMap.computeIfAbsent(Object, Function)可能造成的死循环问题。轮回的信息
季度/月/星期/日/小时/分钟等
定时任务注解
注释用于确定作用域的注释.
查找替换器
查找给定的字符串,并全部替换为新的字符串,其它字符不变
缓冲区的一段
缓冲区中的每个段都是一个循环链表节点,它引用以下内容和
缓冲区中前面的段
池中的每个段都是一个单链列表节点,引用池
段的底层字节数组可以在缓冲区和字节字符串之间共享 当一个
段不能回收,也不能改变它的字节数据
唯一的例外是允许所有者段附加到段中,写入数据
limit及以上 每个字节数组都有一个单独的拥有段 的立场,
限制、prev和next引用不共享片段表示,用于表示文本、集合等数据结构的一个区间。
选择器接口
用于抽象负载均衡策略中的选择方式
带有信号量控制的
Runnable 接口抽象实现敏感词工具类
敏感词过滤处理器,默认按字符数替换成*
3参数Consumer
序列化工具类
注意!此工具类依赖于JDK的序列化机制,某些版本的JDK中可能存在远程注入漏洞。
Service 接口
SPI服务加载接口
用户实现此接口用于制定不同的服务加载方式
基于Map的Set实现
集合中的
Set相关方法封装对象检查工具类,提供字对象的blank和empty等检查
empty定义:
null or 空字对象:""
blank定义:null or 空字对象:"" or 空格、全角空格、制表符、换行符,等不可见字符
值作为集合Set(LinkedHashSet)的Map实现,通过调用putValue可以在相同key时加入多个值,多个值用集合表示
Set包装类
提供列表包装,用于在执行列表方法前后自定义处理逻辑
七曜(七政、七纬、七耀)
类型: 签名异常
Simhash是一种局部敏感hash,用于海量文本去重。
简单的Bean描述,只查找getter和setter方法,规则如下:
不匹配字段,只查找getXXX、isXXX、setXXX方法。
如果同时存在getXXX和isXXX,返回值为Boolean或boolean,isXXX优先。
如果同时存在setXXX的多个重载方法,最小子类优先,如setXXX(List)优先于setXXX(Collection)
简单缓存,无超时实现,默认使用
WeakConcurrentMap实现缓存自动清理简单
Collector接口实现抽象日期基本信息类,包括日期格式、时区、本地化等信息
简单单线程任务调度器
通过自定义Job定时执行任务,通过
SimpleScheduler.getResult() 可以获取调取时的执行结果带有结果计算的任务
用户实现此接口,通过
Runnable.run()实现定时任务的内容,定时任务每次执行或多次执行都可以产生一个结果
这个结果存储在一个volatile的对象属性中,通过SimpleScheduler.Job.getResult()来读取这一阶段的结果。空白WatchListener
用户继承此类后实现需要监听的方法
简单包装对象
通过继承此类,可以直接使用被包装的对象,用于简化和统一封装
字符串模板-单变量占位符 SectionBuffer
单占位符字符串模板
构造器
当您希望仅对该绑定的所有注入重用一个实例时,将此应用于实现类
接收一个字节流 使用这个接口可以在任何地方编写数据
需要:到网络、存储器或内存中的缓冲区 水槽可以分层
转换接收到的数据,如压缩、加密、节流或添加协议框架
BufferSink.outputStream()使一个接收器适应outputStream六曜(孔明六曜星、小六壬)
元(60年=1元)
六十甲子(六十干支周)
平滑权重对象
平滑加权轮询选择器
思路: 比如 A : 5 , B : 3 , C : 2 (服务器 A,B,C 对应权重分别是 5,3,2)
ip: A,B,C
weight: 5,3,2 (计算得到 totalWeight = 10)
currentWeight: 0,0,0 (当前ip的初始权重都为0)
Twitter的Snowflake 算法
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。
snowflake的结构如下(每部分用-分开):
类型: Socket异常
线程安全的SoftMap实现
键和值都为Soft引用,即,在GC报告内存不足时会被GC回收
软引用对象,在GC报告内存不足时会被GC回收
公历日
公历现代节日
公历半年
公历月
公历季度
节气第几天
节气
公历时刻
公历周
公历年
纳音
提供一个字节流 使用此接口从任何地方读取数据
它的位置:来自网络、存储或内存中的缓冲区 来源可能
分层以转换提供的数据,例如解压、解密或移除协议框架
特殊的
Thread,提供对 FastThreadLocal 变量的快速访问。启用框架扩展和替换组件,服务提供发现机制,
实现方制定接口并完成对接口的实现
服务提供接口SPI(Service Provider interface)相关类
SPI机制中的服务加载工具类,流程如下
复制器抽象类
抽象复制器抽象了一个对象复制到另一个对象,通过实现
Copier.copy()方法实现复制逻辑。SSLContext构建器,可以自定义:
协议(protocol),默认TLS
KeyManager,默认空
TrustManager,默认TrustAnyTrustManager,即信任全部
SecureRandom
构建后可获得SSLContext,通过调用SSLContext.getSocketFactory()获取SSLSocketFactory通过StackTrace方式获取调用者。此方式效率最低,不推荐使用
StackTraceElement 转换器
只支持Map方式转换使用
StampedLock保护的缓存,使用读写乐观锁带有状态码的异常
标准的资源加载器
步进接口,此接口用于实现如何对一个对象按照指定步进增加步进
步进接口可以定义以下逻辑:
过滤词及一些简单处理
秒表封装
此工具用于存储一组任务的耗时时间,并一次性打印对比。
比如:我们可以记录多段代码耗时时间,然后一次性打印(StopWatch提供了一个prettyString()函数用于按照指定格式打印出耗时)
存放任务名称和花费时间对象
InputStream 向 OutputStream 拷贝Stream 工具类Stream进度条
提供流拷贝进度监测,如开始、结束触发,以及进度回调。
注意进度回调的
total参数为总大小,某些场景下无总大小的标记,则此值应为-1或者Long.MAX_VALUE,表示此参数无效。InputStream读取器OutputStream写出器字符类型枚举
密码强度等级枚举
严格的Bean信息描述做为BeanInfo替代方案,此对象持有JavaBean中的setters和getters等相关信息描述,
在获取Bean属性的时候,要求字段必须存在并严格匹配。查找Getter和Setter方法时会:
忽略字段和方法名的大小写
Getter查找getXXX、isXXX、getIsXXX
Setter查找setXXX、setIsXXX
Setter忽略参数值与字段值不匹配的情况,因此有多个参数类型的重载时,会调用首次匹配的
字符串转换器,提供各种对象转换为字符串的逻辑封装
字符串查找器
字符串格式化工具
基于字符串的InputStream
JDK中默认的字符串规范化实现
字符串连接器(拼接器),通过给定的字符串和多个元素,拼接为一个字符串
相较于
StringJoiner提供更加灵活的配置,包括:
支持任意Appendable接口实现
支持每个元素单独wrap
支持自定义null的处理逻辑
支持自定义默认结果
null处理的模式字符串工具类
字符串模式匹配,使用${XXXXX}作为变量,例如:
区间字符串替换,指定区间,将区间中的所有字符去除,替换为指定的字符串,字符串只重复一次
此方法使用
String.codePoints()完成拆分替换字符串或字符重复器
用于将给定字符串或字符赋值count次,然后拼接
抽象字符串替换类
通过实现replace方法实现局部替换逻辑
字符串资源,字符串做为资源
字符串模板-抽象 SectionBuffer
字符串切分迭代器
此迭代器是字符串切分的懒模式实现,实例化后不完成切分,只有调用
ComputeIterator.hasNext()或遍历时才完成切分
此迭代器非线程安全字符串模板 格式化 和 反解析 抽象父类
抽象Builder
格式化 和 解析 策略
字符串头尾指定字符去除器
按照断言,除去字符串头尾部的断言为真的字符,如果字符串是
null,依然返回null去除模式
弱引用对象,在GC时发现弱引用会回收其对象
可序列化的Supplier
标点符号常量
线程同步结束器
在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
同步流,可将包装的流同步为ByteArrayInputStream,以便持有内容并关闭原流
表格数据结构定义
此结构类似于Guava的Table接口,使用两个键映射到一个值,类似于表格结构。
单元格,用于表示一个单元格的行、列和值
可重复键和值的Map
通过键值单独建立List方式,使键值对一一对应,实现正向和反向两种查找
无论是正向还是反向,都是遍历列表查找过程,相比标准的HashMap要慢,数据越多越慢
宜忌
takeWhile 的 Spliterator
JDK8中新加入的java.time包对象解析转换器
支持的对象包括:
旬
十神
WrappedStream的扩展,用于为实现类提供更多终端操作方法的增强接口,
该接口提供的方法,返回值类型都不为Stream。地势(长生十二神)
文本查找抽象类
文本相似度计算
类比
ExecutorsThreadFactory创建器
参考:Guava的ThreadFactoryBuilder
线程池工具
线程安全注解
1.此注解放在类上,标识当前类为线程安全的
2.此注解放在方法上,标识方法是线程安全的
三候
定时缓存
此缓存没有容量限制,对象只有在过期后才会被移除
在放弃一项任务之前要花多少时间的策略 当一个任务
超时时,它处于未指定的状态,应该被放弃
例如,如果从源读取超时,则应关闭该源并
稍后应重试读取 如果向接收器写入超时,也是一样
适用规则:关闭洗涤槽,稍后重试
时间日期字符串,日期默认为当天,支持格式类似于;
TimeZone转换器
在协商安全插槽时可以提供的TLS版本
查看
# setEnabledProtocols类型: 令牌过期/其他
一个可以提供默认值的Map
日志追溯
链路跟踪
中国传统文化
使用给定的转换函数,转换源集合为新类型的集合
WrappedStream的扩展,用于为实现类提供更多中间操作方法的增强接口,
该接口提供的方法,返回值类型都为Stream。自定义键和值转换的的Map
继承此类后,通过实现
TransMap.customKey(Object)和TransMap.customValue(Object),按照给定规则加入到map或获取值。使用给定的转换函数,转换源
Spliterator为新类型的Spliterator树构建器
允许拥有一个父节点与多个子节点的
Map.Entry实现,
表示一个以key作为唯一标识,并且可以挂载一个对应值的树节点,
提供一些基于该节点对其所在树结构进行访问的方法树工具类
树节点 每个属性都可以在
NodeConfig中被重命名
在你的项目里它可以是部门实体、地区实体等任意类树节点实体
类树节点实体: 包含key,父Key.不限于这些属性的可以构造成一颗树的实体对象不可变三元组对象
三值表结构,可重复
用于提供三种值相互查找操作
查找方式为indexOf方式遍历查找,数据越多越慢。
https 域名校验,信任所有域名
注意此类慎用,信任全部可能会有中间人攻击风险
信任所有信任管理器,默认信任所有客户端和服务端证书
注意此类慎用,信任全部可能会有中间人攻击风险
不可变数组类型(元组),用于多值返回
多值可以支持每个元素值类型不同
Tuple转换器黄道黑道十二神
运(20年=1运,3运=1元)
二十八宿
基本类型的getter接口
提供一个统一的接口定义返回不同类型的值(基本类型),定义类型包括:
Object
String
Integer
Short
Boolean
Long
Character
Float
Double
Byte
BigDecimal
BigInteger
Enum
Number
Date
java.sql.Time
java.sql.Timestamp
java.sql.Timestamp
LocalDateTime
LocalDate
LocalTime
通过实现此接口,最简单方式为通过实现
TypeGetter.getObject(Object, Object)方法,完成所有类型的值获取,获取默认采用
Convert方式自动转换。如果有自定义实现,重写对应getXXX方法即可。针对
Type 的工具类封装
最主要功能包括:Type类型参考
通过构建一个类型参考子类,可以获取其泛型参数中的Type类型。例如:
ULID(Universally Unique Lexicographically Sortable Identifier)通用唯一词典分类标识符,特性:
与UUID的128位兼容性
每毫秒1.21e + 24个唯一ULID
按字典顺序(也就是字母顺序)排序
规范地编码为26个字符串,而不是UUID的36个字符
使用Crockford的base32获得更好的效率和可读性(每个字符5位)
不区分大小写
没有特殊字符(URL安全)
单调排序顺序(正确检测并处理相同的毫秒)
可序列化的UnaryOperator
类型: 未受检异常
提供Unicode字符串和普通字符串之间的转换
唯一键的Set
通过自定义唯一键,通过
UniqueKeySet.uniqueGenerator生成节点对象对应的键作为Map的key,确定唯一
此Set与HashSet不同的是,HashSet依赖于Object.equals(Object)确定唯一
但是很多时候我们无法对对象进行修改,此时在外部定义一个唯一规则,即可完成去重。日期时间单位,每个单位都是以毫秒为基数
全局命名空间上下文
见:https://www.ibm.com/developerworks/cn/xml/x-nmspccontext/
URI对象转换器
URL 生成器,格式形如:
URL对象转换器
URL解码,数据内容的类型是 application/x-www-form-urlencoded。
URL编码器,提供百分号编码实现
URL(Uniform Resource Locator)统一资源定位符相关工具类
URL中Path部分的封装
URL中查询字符串部分的封装,类似于:
编码模式
根据不同场景以及不同环境,对Query中的name和value采用不同的编码策略
URL资源访问类
提供通用唯一识别码(universally unique identifier)(UUID)实现,UUID表示一个128位的值。
此类拷贝自java.util.UUID,用于生成不带-的UUID字符串
Generate UUID 不同版本UUID在线生成和参考:Generate UUID
UUID 的 5 个版本:UUID 5 version 区别
UUID代码实现参考:sake/uuid4j实现
UUIDv1: Structure,形如:xxxxxxxx-xxxx-1xxx-yxxx-xxxxxxxxxxxx,UUID v1 表示为 32 个字符的十六进制字符串,分五组显示,并用连字符分隔; 基于时间,同时访问主机的 MAC 地址; generate a time based UUID (V1)
UUIDv2: Structure,形如:xxxxxxxx-xxxx-2xxx-yxxx-xxxxxxxxxxxx,UUID v2 的结构与其他 UUID 相同;需要 DCE–分布式计算机环境 生成唯一标识符;由于基于计算主机名,有隐私风险,未大规模使用
UUIDv3: Structure,形如:xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx,UUID v3 的结构与其他 UUID 相同;需要 基于命名·使用MD5哈希加密 生成唯一标识符;
UUIDv4: Structure,形如:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,UUID v4 的结构与其他 UUID 相同,使用最多的版本,使用随机数生成。 默认实现都是该版本; generate a random UUID (V4)
UUIDv5: Structure,形如:xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx,UUID v5 的结构与其他 UUID 相同,需要根据 基于命名·使用SHA-1哈希加密 生成唯一标识符; generate name based UUID with SHA1 hashing (v5)
UUIDv6: Structure,形如:xxxxxxxx-xxxx-6xxx-yxxx-xxxxxxxxxxxx,UUID v6 的结构与其他 UUID 相同,与 UUIDv1 的字段兼容版本,结合 UUIDv1 和 UUIDv4 的优点,确保基于时间的自然排序和更好的隐私;
UUIDv7: Structure,形如:xxxxxxxx-xxxx-7xxx-yxxx-xxxxxxxxxxxx,UUID v7 的结构与其他 UUID 相同,提供了从 Unix Epoch 时间戳派生的时间排序值,以及改进的熵特性。如果可能,建议使用版本 1 和 6; generate a ordered time based UUID (V7)
version 字段保存描述此 UUID 类型的值。有 7 种不同的基本 UUID 类型:基于时间的 UUIDv1、DCE 安全 UUIDv2、基于名称的 UUIDv3 、随机生成的 UUIDv4、基于名称的SHA-1算法的 UUIDv5、基于时间的随机生成的 UUIDv6 和 基于时间戳的 UUIDv7。
这些类型的 version 值分别为 1、2、3、4、5、6 和 7。最常用的V4
这些通用标识符具有不同的变体。此类的方法用于操作 Leach-Salz 变体,不过构造方法允许创建任何 UUID 变体(将在下面进行描述)。
变体 2 (Leach-Salz) UUID 的布局如下: long 型数据的最高有效位由以下无符号字段组成:
UUID对象转换器转换器
类型: 校验异常
带有类验证的对象流,用于避免反序列化漏洞
详细见:https://xz.aliyun.com/t/41/
字段验证器(验证器),分两种类型的验证:
isXXX:通过返回boolean值判断是否满足给定格式。
validateXXX:通过抛出异常
ValidateException检查是否满足给定格式。
值提供者,用于提供Bean注入时参数对应值得抽象接口
继承或匿名实例化此接口
在Bean注入过程中,Bean获得字段名,通过外部方式根据这个字段名查找相应的字段值,然后注入Bean
配置注解,用于添加前缀
ValueProvider属性拷贝到Bean中的拷贝器日期各个部分的枚举
与Calendar相应值对应
字符串版本表示,用于解析版本号的不同部分并比较大小。
来自:java.lang.module.ModuleDescriptor.Version
版本比较器
比较两个版本的大小
排序时版本从小到大排序,即比较时小版本在前,大版本在后
支持如:1.3.20.8,6.82.20160101,8.5a/8.5c等版本形式
参考:java.lang.module.ModuleDescriptor.Version
类型: 版本异常
VFS资源封装
支持VFS 3.x on JBoss AS 6+,JBoss AS 7 and WildFly 8+
参考:org.springframework.core.io.VfsUtils
VIN是Vehicle Identification Number的缩写,即车辆识别号码。VIN码是全球通行的车辆唯一标识符,由17位数字和字母组成。
观察者(监视器)
观察者链
用于加入多个观察者
监听事件类型枚举,包括:
监听工具类
主要负责文件监听器的快捷创建
路径监听器
监听器可监听目录或文件
如果监听的Path不存在,则递归创建空目录然后监听此空目录
递归监听目录时,并不会监听新创建的目录
WatchEvent 包装类,提供可选的监听事件和监听选项,实现方法包括:
注册:WatchServiceWrapper.registerPath(Path, int)注册需要监听的路径。
监听:WatchServiceWrapper.watch(Watcher, Predicate) 启动监听并指定事件触发后的行为。
弱引用缓存
对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。
丢弃某个键时,其条目从映射中有效地移除。
线程安全的WeakMap实现
键和值都为Weak引用,即,在GC时发现弱引用会回收其对象
使用WeakHashMap(线程安全)存储对象的规范化对象,注意此对象需单例使用!
线程安全的WeakMap实现
键为Weak引用,即,在GC时发现弱引用会回收其对象
弱引用对象,在GC时发现弱引用会回收其对象
Web root资源访问对象
星期
星期枚举
与Calendar中的星期int值对应
确定值的选择器
A common set of
Weigher and EntryWeigher implementations.带有权重的对象包装
权重随机选择算法实现
DFA(Deterministic Finite Automaton 确定有穷自动机)
DFA单词树(以下简称单词树),常用于在某大段文字中快速查找某几个关键词是否存在。
单词树使用group区分不同的关键字集合,不同的分组可以共享树枝,避免重复建树。
单词树使用树状结构表示一组单词。
例如:红领巾,红河 构建树后为:
Stream实例的包装器,用于增强原始的Stream,提供一些额外的中间与终端操作。
默认提供两个可用实现:
EasyStream:针对单元素的通用增强流实现;
EntryStream:针对键值对类型元素的增强流实现;
包装接口
通过一个 Writer和一个CharsetDecoder实现将字节数据输出为字符数据。可以通过不同的构造函数配置缓冲区大小和是否立即写入。
来自:https://github.com/subchen/jetbrick-commons/blob/master/src/main/java/jetbrick/io/stream/WriterOutputStream.java
XXE安全相关参数
见:https://blog.spoock.com/2018/10/23/java-xxe/
日期转换器
XML工具类
此工具使用w3c dom工具,不需要依赖第三方包。
工具类封装了XML文档的创建、读取、写出和部分XML操作
XML转换器,用于转换Map或Bean等
XML SAX方式读取器
XML的UNESCAPE
XML生成器
XPath相关工具类XXE漏洞修复相关工具类
参考:https://blog.spoock.com/2018/10/23/java-xxe/
ZeroMQ Z85实现,
定义见:ZeroMQ Z85
Zip文件拷贝的FileVisitor实现,zip中追加文件,此类非线程安全
此类在遍历源目录并复制过程中会自动创建目标目录中不存在的上级目录
ZipFile 资源包装压缩工具类
Zip文件或流读取器,一般用于Zip文件解压
Zip文件替换,用户替换源Zip文件,并生成新的文件
Zip资源表示,如Zip流资源或Zip文件资源
Zip安全相关类,如检查Zip bomb漏洞等
ZipInputStream 资源包装Zip生成封装
生肖
宫
时区计算
ZoneId转换器