Skip to content

Commit f80756f

Browse files
committed
docs: 完善 Java 底层工具类 的文档注释
1 parent cbca7bb commit f80756f

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

src/main/java/me/codeplayer/util/JavaX.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,17 @@
1313
import static java.lang.invoke.MethodType.methodType;
1414

1515
/**
16+
* 使用 底层 API 的 Java 高性能 辅助工具类。该工具类具有实验性质。
17+
*
18+
* <p> 请<b>注意</b>:为了确保高性能,本类中的方法会尽量避免数组的复制开销,因此请务必谨慎使用,后续<b>不要</b>修改传入或返回的 数组数据!
19+
*
1620
* @see com.alibaba.fastjson2.util.JDKUtils
1721
*/
1822
@SuppressWarnings({ "JavaLangInvokeHandleSignature", "unchecked" })
1923
public class JavaX {
2024

2125
public static final int javaVersion = parseJavaVersion(System.getProperty("java.version"));
26+
/** 指示当前 Java 版本是否为 Java 9+ 版本 */
2227
public static final boolean isJava9OrHigher = javaVersion >= 9;
2328

2429
public static final Unsafe UNSAFE;
@@ -37,8 +42,37 @@ public class JavaX {
3742
// GraalVM not support
3843
// Android not support
3944
public static final BiFunction<char[], Boolean, String> STRING_CREATOR_JDK8;
45+
/**
46+
* <ul>
47+
* <li>在 JDK 9+ 并且 <code> String.COMPACT_STRINGS = true </code>时,通过 <code> STRING_CREATOR_JDK11.apply( bytes, coder ) </code> 构造字符串可以<b>避免</b> byte[] 的复制开销。
48+
* <p><b>注意</b>:请自行确保 <code> bytes </code> 和 <code> coder </code> 数据的正确性,并且后续<b>不能</b>修改 <code> bytes </code>!
49+
* </li>
50+
* <li>如未满足上述条件, 则 <code> STRING_VALUE.apply( bytes, coder ) </code> 等价于 <code> new String( bytes ) </code>
51+
* </ul>
52+
*
53+
* @see String#String(byte[])
54+
*/
4055
public static final BiFunction<byte[], Byte, String> STRING_CREATOR_JDK11;
56+
/**
57+
* <ul>
58+
* <li>在 JDK 9+ 并且 <code> String.COMPACT_STRINGS = true </code>时,通过 <code> STRING_CODER.applyAsInt( str ) </code> 可以直接获取底层 <code> String.coder </code>。
59+
* <li>如未满足上述条件, 则 <code> STRING_CODER.applyAsInt( str ) </code> 等价于 {@link #UTF16}
60+
* </ul>
61+
*
62+
* @see #LATIN1
63+
* @see #UTF16
64+
*/
4165
public static final ToIntFunction<String> STRING_CODER;
66+
/**
67+
* <ul>
68+
* <li>在 JDK 9+ 并且 <code> String.COMPACT_STRINGS = true </code>时,通过 <code> STRING_VALUE.apply( str ) </code> 可以直接获取底层 <code> String.value </code> 的 <code> byte[] </code> <b>引用</b>。
69+
* <p><b>注意</b>:外部【不能】修改引用的字节数组!!
70+
* </li>
71+
* <li>如未满足上述条件, 则 <code> STRING_VALUE.apply( str ) </code> 等价于 <code> str.getByte() </code>
72+
* </ul>
73+
*
74+
* @see String#getBytes()
75+
*/
4276
public static final Function<String, byte[]> STRING_VALUE;
4377

4478
@Nullable
@@ -459,10 +493,11 @@ private static boolean isASCIIOnJdk8(String str) {
459493

460494
/**
461495
* 将字符串转换为 UTF-8 编码的字节数组
462-
* <p> 【注意】:在 JDK 9+,返回的字节数组可能是字符串底层数组的引用,只能读取、不可修改,否则可能引发错误!!!
496+
* <p> 【注意】:在 JDK 9+,返回的字节数组可能是字符串底层数组的<b>引用</b>,只能读取、<b>不可</b>修改,否则可能引发错误!!!
463497
*
464498
* @param str 待转换的字符串,不能为空
465499
* @return UTF-8编码的字节数组
500+
* @see String#getBytes(Charset)
466501
*/
467502
public static byte[] getUtf8Bytes(@Nonnull String str) {
468503
if (STRING_CODER.applyAsInt(str) == LATIN1) {
@@ -476,14 +511,15 @@ public static byte[] getUtf8Bytes(@Nonnull String str) {
476511

477512
/**
478513
* JDK 9+时,此值与 <code> String.COMPACT_STRINGS </code> 保持一致。
479-
* <p> JDK 8值,此值恒为 false
514+
* <p> JDK 8 时,此值恒为 false
480515
*/
481516
public static boolean supportLatin1() {
482517
return supportLatin1;
483518
}
484519

485520
/**
486-
* 根据指定的字符集创建新的字符串
521+
* 将指定字符集的 字节数组 构造为对应的 字符串
522+
* <p> 【注意】:在 JDK 9+ 时,为提高性能,返回的字符串内部可能直接使用传入的 <code> bytes </code> 数组的 <b>引用</b>,请自行确保后续<b>不要</b>修改入参 <code> bytes </code> 的数据!!!
487523
*
488524
* @param bytes 字节数组
489525
* @param charset 字符集

0 commit comments

Comments
 (0)