From c8309ef5fb8727d26bc04842a8bc610c7f343772 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 23 Mar 2023 23:50:59 +0800 Subject: [PATCH] fix code --- .../java/cn/hutool/core/codec/HexUtil.java | 7 +- .../cn/hutool/core/codec/binary/Base32.java | 7 +- .../cn/hutool/core/codec/binary/Base62.java | 13 +- .../cn/hutool/core/codec/binary/Base64.java | 13 +- .../cn/hutool/core/codec/hash/CityHash.java | 4 +- .../cn/hutool/core/codec/hash/MurmurHash.java | 15 +- .../java/cn/hutool/core/compress/ZipUtil.java | 23 +- .../java/cn/hutool/core/convert/Convert.java | 12 +- .../core/convert/impl/ArrayConverter.java | 2 +- .../core/convert/impl/NumberConverter.java | 2 +- .../java/cn/hutool/core/io/BufferUtil.java | 11 +- .../main/java/cn/hutool/core/io/IoUtil.java | 3 +- .../io/resource/CharSequenceResource.java | 11 +- .../hutool/core/io/stream/StrInputStream.java | 4 +- .../java/cn/hutool/core/math/NumberUtil.java | 239 ++++++++++-------- .../cn/hutool/core/net/url/URLDecoder.java | 3 +- .../cn/hutool/core/text/CharSequenceUtil.java | 139 +++++----- .../java/cn/hutool/core/text/StrUtil.java | 2 + .../java/cn/hutool/core/util/ByteUtil.java | 233 ++++++++++++----- .../java/cn/hutool/core/codec/Base32Test.java | 4 +- .../java/cn/hutool/core/codec/Base64Test.java | 4 +- .../hutool/core/codec/hash/CityHashTest.java | 18 +- .../core/codec/hash/MurmurHashTest.java | 18 +- .../codec/hash/metro/MetroHash128Test.java | 6 +- .../codec/hash/metro/MetroHash64Test.java | 6 +- .../core/codec/hash/metro/MetroHashTest.java | 10 +- .../cn/hutool/core/convert/ConvertTest.java | 2 +- .../cn/hutool/core/io/checksum/CrcTest.java | 6 +- .../core/lang/func/LambdaFactoryTest.java | 7 +- .../core/text/CharSequenceUtilTest.java | 48 ++++ .../cn/hutool/core/util/ByteUtilTest.java | 68 ++--- .../cn/hutool/core/util/HashUtilTest.java | 7 +- .../cn/hutool/core/util/NumberUtilTest.java | 108 ++++++++ .../java/cn/hutool/core/util/ZipUtilTest.java | 14 +- .../java/cn/hutool/crypto/SecureUtil.java | 9 +- .../asymmetric/AsymmetricEncryptor.java | 8 +- .../cn/hutool/crypto/asymmetric/Sign.java | 12 +- .../cn/hutool/crypto/digest/Digester.java | 8 +- .../java/cn/hutool/crypto/digest/mac/Mac.java | 12 +- .../java/cn/hutool/crypto/symmetric/RC4.java | 9 +- .../crypto/symmetric/SymmetricEncryptor.java | 8 +- .../cn/hutool/crypto/OpensslKeyUtilTest.java | 6 +- .../java/cn/hutool/crypto/PemUtilTest.java | 6 +- .../cn/hutool/crypto/asymmetric/RSATest.java | 29 ++- .../cn/hutool/crypto/asymmetric/SM2Test.java | 13 +- .../cn/hutool/crypto/asymmetric/SignTest.java | 8 +- .../cn/hutool/crypto/symmetric/DesTest.java | 5 +- .../java/cn/hutool/extra/ssh/JschUtil.java | 7 +- .../hutool/extra/servlet/ServletUtilTest.java | 6 +- .../http/client/body/UrlEncodedFormBody.java | 4 +- .../http/server/HttpServerResponse.java | 15 +- .../json/jwt/signers/AsymmetricJWTSigner.java | 5 +- .../json/jwt/signers/HMacJWTSigner.java | 7 +- .../test/java/cn/hutool/json/jwt/JWTTest.java | 11 +- .../cn/hutool/socket/aio/AioServerTest.java | 4 +- .../cn/hutool/socket/nio/NioClientTest.java | 6 +- .../cn/hutool/socket/nio/NioServerTest.java | 2 +- 57 files changed, 764 insertions(+), 505 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/HexUtil.java b/hutool-core/src/main/java/cn/hutool/core/codec/HexUtil.java index 8821fa1cb..9cdb5a465 100755 --- a/hutool-core/src/main/java/cn/hutool/core/codec/HexUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/HexUtil.java @@ -2,9 +2,10 @@ package cn.hutool.core.codec; import cn.hutool.core.codec.binary.Base16Codec; import cn.hutool.core.exceptions.UtilException; +import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.text.StrUtil; import java.awt.Color; import java.math.BigInteger; @@ -69,7 +70,7 @@ public class HexUtil { * @return 十六进制char[] */ public static char[] encodeHex(final String str, final Charset charset) { - return encodeHex(StrUtil.bytes(str, charset), true); + return encodeHex(ByteUtil.toBytes(str, charset), true); } /** @@ -101,7 +102,7 @@ public class HexUtil { * @return 十六进制String */ public static String encodeHexStr(final String data, final Charset charset) { - return encodeHexStr(StrUtil.bytes(data, charset), true); + return encodeHexStr(ByteUtil.toBytes(data, charset), true); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base32.java b/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base32.java index 19bf32f0f..177294482 100644 --- a/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base32.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base32.java @@ -1,7 +1,8 @@ package cn.hutool.core.codec.binary; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import java.nio.charset.Charset; @@ -49,7 +50,7 @@ public class Base32 { * @return 被加密后的字符串 */ public static String encode(final String source, final Charset charset) { - return encode(StrUtil.bytes(source, charset)); + return encode(ByteUtil.toBytes(source, charset)); } /** @@ -80,7 +81,7 @@ public class Base32 { * @return 被加密后的字符串 */ public static String encodeHex(final String source, final Charset charset) { - return encodeHex(StrUtil.bytes(source, charset)); + return encodeHex(ByteUtil.toBytes(source, charset)); } //----------------------------------------------------------------------------------------- decode diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base62.java b/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base62.java index f0dc87817..9ef3078b2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base62.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base62.java @@ -1,9 +1,10 @@ package cn.hutool.core.codec.binary; -import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import java.io.File; import java.io.InputStream; @@ -39,7 +40,7 @@ public class Base62 { * @return 被加密后的字符串 */ public static String encode(final CharSequence source, final Charset charset) { - return encode(StrUtil.bytes(source, charset)); + return encode(ByteUtil.toBytes(source, charset)); } /** @@ -90,7 +91,7 @@ public class Base62 { * @return 被加密后的字符串 */ public static String encodeInverted(final CharSequence source, final Charset charset) { - return encodeInverted(StrUtil.bytes(source, charset)); + return encodeInverted(ByteUtil.toBytes(source, charset)); } /** @@ -184,7 +185,7 @@ public class Base62 { * @return 被加密后的字符串 */ public static byte[] decode(final CharSequence base62Str) { - return decode(StrUtil.bytes(base62Str, DEFAULT_CHARSET)); + return decode(ByteUtil.toBytes(base62Str, DEFAULT_CHARSET)); } /** @@ -247,7 +248,7 @@ public class Base62 { * @return 被加密后的字符串 */ public static byte[] decodeInverted(final CharSequence base62Str) { - return decodeInverted(StrUtil.bytes(base62Str, DEFAULT_CHARSET)); + return decodeInverted(ByteUtil.toBytes(base62Str, DEFAULT_CHARSET)); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base64.java b/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base64.java index 3b47bcb31..02f933486 100644 --- a/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base64.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/binary/Base64.java @@ -1,9 +1,10 @@ package cn.hutool.core.codec.binary; -import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import java.io.File; import java.io.InputStream; @@ -64,7 +65,7 @@ public class Base64 { * @return 被编码后的字符串 */ public static String encode(final CharSequence source, final Charset charset) { - return encode(StrUtil.bytes(source, charset)); + return encode(ByteUtil.toBytes(source, charset)); } /** @@ -76,7 +77,7 @@ public class Base64 { * @since 3.0.6 */ public static String encodeUrlSafe(final CharSequence source, final Charset charset) { - return encodeUrlSafe(StrUtil.bytes(source, charset)); + return encodeUrlSafe(ByteUtil.toBytes(source, charset)); } /** @@ -220,7 +221,7 @@ public class Base64 { * @return 解码后的bytes */ public static byte[] decode(final CharSequence base64) { - return decode(StrUtil.bytes(base64, DEFAULT_CHARSET)); + return decode(ByteUtil.toBytes(base64, DEFAULT_CHARSET)); } /** @@ -245,7 +246,7 @@ public class Base64 { return false; } - final byte[] bytes = StrUtil.utf8Bytes(base64); + final byte[] bytes = ByteUtil.toUtf8Bytes(base64); if (bytes.length != base64.length()) { // 如果长度不相等,说明存在双字节字符,肯定不是Base64,直接返回false diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/hash/CityHash.java b/hutool-core/src/main/java/cn/hutool/core/codec/hash/CityHash.java index cebc5f715..d0762df57 100644 --- a/hutool-core/src/main/java/cn/hutool/core/codec/hash/CityHash.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/hash/CityHash.java @@ -391,11 +391,11 @@ public class CityHash implements Hash32, Hash64, Hash128 } private static long fetch64(final byte[] byteArray, final int start) { - return ByteUtil.bytesToLong(byteArray, start, ByteUtil.CPU_ENDIAN); + return ByteUtil.toLong(byteArray, start, ByteUtil.CPU_ENDIAN); } private static int fetch32(final byte[] byteArray, final int start) { - return ByteUtil.bytesToInt(byteArray, start, ByteUtil.CPU_ENDIAN); + return ByteUtil.toInt(byteArray, start, ByteUtil.CPU_ENDIAN); } private static long hashLen16(final long u, final long v, final long mul) { diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/hash/MurmurHash.java b/hutool-core/src/main/java/cn/hutool/core/codec/hash/MurmurHash.java index e5d69616c..7e6a720c5 100644 --- a/hutool-core/src/main/java/cn/hutool/core/codec/hash/MurmurHash.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/hash/MurmurHash.java @@ -1,7 +1,6 @@ package cn.hutool.core.codec.hash; import cn.hutool.core.codec.Number128; -import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharsetUtil; @@ -60,7 +59,7 @@ public class MurmurHash implements Hash32, Hash64, Hash128, Hash64, Hash128, Hash64, Hash128, Hash64, Hash128, Hash64, Hash128, Hash64, Hash128 0) && ((n & (n - 1)) == 0); } + /** + * 解析转换数字字符串为 {@link java.lang.Integer } 规则如下: + * + *
+	 * 1、0x开头的视为16进制数字
+	 * 2、0开头的忽略开头的0
+	 * 3、其它情况按照10进制转换
+	 * 4、空串返回0
+	 * 5、.123形式返回0(按照小于0的小数对待)
+	 * 6、123.56截取小数点之前的数字,忽略小数部分
+	 * 7、解析失败返回默认值
+	 * 
+ * + * @param numberStr 数字字符串,支持0x开头、0开头和普通十进制 + * @param defaultValue 如果解析失败, 将返回defaultValue, 允许null + * @return Integer + */ + public static Integer parseInt(final String numberStr, final Integer defaultValue) { + if (StrUtil.isNotBlank(numberStr)) { + try { + return parseInt(numberStr); + } catch (final NumberFormatException ignore) { + // ignore + } + } + return defaultValue; + } + /** * 解析转换数字字符串为int型数字,规则如下: * @@ -1422,7 +1450,7 @@ public class NumberUtil { return 0; } - if(StrUtil.containsIgnoreCase(number, "E")){ + if (StrUtil.containsIgnoreCase(number, "E")) { // 科学计数法忽略支持,科学计数法一般用于表示非常小和非常大的数字,这类数字转换为int后精度丢失,没有意义。 throw new NumberFormatException(StrUtil.format("Unsupported int format: [{}]", number)); } @@ -1439,6 +1467,35 @@ public class NumberUtil { } } + /** + * 解析转换数字字符串为 {@link java.lang.Long } 规则如下: + * + *
+	 * 1、0x开头的视为16进制数字
+	 * 2、0开头的忽略开头的0
+	 * 3、其它情况按照10进制转换
+	 * 4、空串返回0
+	 * 5、.123形式返回0(按照小于0的小数对待)
+	 * 6、123.56截取小数点之前的数字,忽略小数部分
+	 * 7、解析失败返回默认值
+	 * 
+ * + * @param numberStr 数字字符串,支持0x开头、0开头和普通十进制 + * @param defaultValue 如果解析失败, 将返回defaultValue, 允许null + * @return Long + */ + public static Long parseLong(final String numberStr, final Long defaultValue) { + if (StrUtil.isNotBlank(numberStr)) { + try { + return parseLong(numberStr); + } catch (final NumberFormatException ignore) { + // ignore + } + } + + return defaultValue; + } + /** * 解析转换数字字符串为long型数字,规则如下: * @@ -1472,6 +1529,32 @@ public class NumberUtil { } } + /** + * 解析转换数字字符串为 {@link java.lang.Float } 规则如下: + * + *
+	 * 1、0开头的忽略开头的0
+	 * 2、空串返回0
+	 * 3、其它情况按照10进制转换
+	 * 4、.123形式返回0.123(按照小于0的小数对待)
+	 * 
+ * + * @param numberStr 数字字符串,支持0x开头、0开头和普通十进制 + * @param defaultValue 如果解析失败, 将返回defaultValue, 允许null + * @return Float + */ + public static Float parseFloat(final String numberStr, final Float defaultValue) { + if (StrUtil.isNotBlank(numberStr)) { + try { + return parseFloat(numberStr); + } catch (final NumberFormatException ignore) { + // ignore + } + } + + return defaultValue; + } + /** * 解析转换数字字符串为long型数字,规则如下: * @@ -1498,6 +1581,31 @@ public class NumberUtil { } } + /** + * 解析转换数字字符串为 {@link java.lang.Double } 规则如下: + * + *
+	 * 1、0开头的忽略开头的0
+	 * 2、空串返回0
+	 * 3、其它情况按照10进制转换
+	 * 4、.123形式返回0.123(按照小于0的小数对待)
+	 * 
+ * + * @param numberStr 数字字符串,支持0x开头、0开头和普通十进制 + * @param defaultValue 如果解析失败, 将返回defaultValue, 允许null + * @return Double + */ + public static Double parseDouble(final String numberStr, final Double defaultValue) { + if (StrUtil.isNotBlank(numberStr)) { + try { + return parseDouble(numberStr); + } catch (final NumberFormatException ignore) { + // ignore + } + } + return defaultValue; + } + /** * 解析转换数字字符串为long型数字,规则如下: * @@ -1524,6 +1632,25 @@ public class NumberUtil { } } + /** + * 将指定字符串转换为{@link Number } + * 此方法不支持科学计数法 + * + * @param numberStr Number字符串 + * @param defaultValue 如果解析失败, 将返回defaultValue, 允许null + * @return Number对象 + */ + public static Number parseNumber(final String numberStr, final Number defaultValue) { + if (StrUtil.isNotBlank(numberStr)) { + try { + return parseNumber(numberStr); + } catch (final NumberFormatException ignore) { + // ignore + } + } + return defaultValue; + } + /** * 将指定字符串转换为{@link Number} 对象
* 此方法不支持科学计数法 @@ -1554,114 +1681,6 @@ public class NumberUtil { } } - /** - * int值转byte数组,使用大端字节序(高位字节在前,低位字节在后)
- * 见:http://www.ruanyifeng.com/blog/2016/11/byte-order.html - * - * @param value 值 - * @return byte数组 - * @since 4.4.5 - */ - public static byte[] toBytes(final int value) { - final byte[] result = new byte[4]; - - result[0] = (byte) (value >> 24); - result[1] = (byte) (value >> 16); - result[2] = (byte) (value >> 8); - result[3] = (byte) (value /* >> 0 */); - - return result; - } - - /** - * byte数组转int,使用大端字节序(高位字节在前,低位字节在后)
- * 见:http://www.ruanyifeng.com/blog/2016/11/byte-order.html - * - * @param bytes byte数组 - * @return int - * @since 4.4.5 - */ - public static int toInt(final byte[] bytes) { - return (bytes[0] & 0xff) << 24// - | (bytes[1] & 0xff) << 16// - | (bytes[2] & 0xff) << 8// - | (bytes[3] & 0xff); - } - - /** - * 以无符号字节数组的形式返回传入值。 - * - * @param value 需要转换的值 - * @return 无符号bytes - * @since 4.5.0 - */ - public static byte[] toUnsignedByteArray(final BigInteger value) { - final byte[] bytes = value.toByteArray(); - - if (bytes[0] == 0) { - final byte[] tmp = new byte[bytes.length - 1]; - System.arraycopy(bytes, 1, tmp, 0, tmp.length); - - return tmp; - } - - return bytes; - } - - /** - * 以无符号字节数组的形式返回传入值。 - * - * @param length bytes长度 - * @param value 需要转换的值 - * @return 无符号bytes - * @since 4.5.0 - */ - public static byte[] toUnsignedByteArray(final int length, final BigInteger value) { - final byte[] bytes = value.toByteArray(); - if (bytes.length == length) { - return bytes; - } - - final int start = bytes[0] == 0 ? 1 : 0; - final int count = bytes.length - start; - - if (count > length) { - throw new IllegalArgumentException("standard length exceeded for value"); - } - - final byte[] tmp = new byte[length]; - System.arraycopy(bytes, start, tmp, tmp.length - count, count); - return tmp; - } - - /** - * 无符号bytes转{@link BigInteger} - * - * @param buf buf 无符号bytes - * @return {@link BigInteger} - * @since 4.5.0 - */ - public static BigInteger fromUnsignedByteArray(final byte[] buf) { - return new BigInteger(1, buf); - } - - /** - * 无符号bytes转{@link BigInteger} - * - * @param buf 无符号bytes - * @param off 起始位置 - * @param length 长度 - * @return {@link BigInteger} - */ - public static BigInteger fromUnsignedByteArray(final byte[] buf, final int off, final int length) { - byte[] mag = buf; - if (off != 0 || length != buf.length) { - mag = new byte[length]; - System.arraycopy(buf, off, mag, 0, length); - } - return new BigInteger(1, mag); - } - /** * 检查是否为有效的数字
* 检查Double和Float是否为无限大,或者Not a Number
@@ -1672,7 +1691,7 @@ public class NumberUtil { * @since 4.6.7 */ public static boolean isValidNumber(final Number number) { - if(null == number){ + if (null == number) { return false; } if (number instanceof Double) { diff --git a/hutool-core/src/main/java/cn/hutool/core/net/url/URLDecoder.java b/hutool-core/src/main/java/cn/hutool/core/net/url/URLDecoder.java index 0dd212271..6f83656ca 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/url/URLDecoder.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/url/URLDecoder.java @@ -1,5 +1,6 @@ package cn.hutool.core.net.url; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.text.StrUtil; @@ -108,7 +109,7 @@ public class URLDecoder implements Serializable { if (null == charset) { return str; } - return StrUtil.str(decode(StrUtil.bytes(str, charset), isPlusToSpace), charset); + return StrUtil.str(decode(ByteUtil.toBytes(str, charset), isPlusToSpace), charset); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java index 91db57c57..e4e2e6988 100755 --- a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java @@ -12,12 +12,8 @@ import cn.hutool.core.text.finder.CharMatcherFinder; import cn.hutool.core.text.finder.Finder; import cn.hutool.core.text.finder.StrFinder; import cn.hutool.core.text.split.SplitUtil; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.CharUtil; -import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.*; -import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.text.MessageFormat; import java.text.Normalizer; @@ -39,6 +35,7 @@ public class CharSequenceUtil extends StrChecker { /** * 未找到的的位置表示,用-1表示 + * * @see Finder#INDEX_NOT_FOUND */ public static final int INDEX_NOT_FOUND = Finder.INDEX_NOT_FOUND; @@ -1610,7 +1607,7 @@ public class CharSequenceUtil extends StrChecker { return array; } - // ------------------------------------------------------------------------ sub + // region ----- sub /** * 改进JDK subString
@@ -1719,7 +1716,7 @@ public class CharSequenceUtil extends StrChecker { } int counterOfDoubleByte = 0; - final byte[] b = bytes(str, CharsetUtil.GBK); + final byte[] b = ByteUtil.toBytes(str, CharsetUtil.GBK); if (b.length <= len) { return str.toString(); } @@ -1819,9 +1816,9 @@ public class CharSequenceUtil extends StrChecker { } final int toIndex; - if(fromIndex < 0){ + if (fromIndex < 0) { toIndex = fromIndex - length; - }else{ + } else { toIndex = fromIndex + length; } return sub(input, fromIndex, toIndex); @@ -2122,8 +2119,9 @@ public class CharSequenceUtil extends StrChecker { public static String[] subBetweenAll(final CharSequence str, final CharSequence prefixAndSuffix) { return subBetweenAll(str, prefixAndSuffix, prefixAndSuffix); } + // endregion - // ------------------------------------------------------------------------ repeat + // region ----- repeat /** * 重复某个字符 @@ -2248,8 +2246,9 @@ public class CharSequenceUtil extends StrChecker { } return builder.toString(); } + // endregion - // ------------------------------------------------------------------------ equals + // region ----- equals /** * 比较两个字符串(大小写敏感)。 @@ -2423,8 +2422,9 @@ public class CharSequenceUtil extends StrChecker { return str1.toString().regionMatches(ignoreCase, start1, str2.toString(), start2, length); } + // endregion - // ------------------------------------------------------------------------ format + // region ----- format /** * 格式化文本, {} 表示占位符
@@ -2460,68 +2460,7 @@ public class CharSequenceUtil extends StrChecker { public static String indexedFormat(final CharSequence pattern, final Object... arguments) { return MessageFormat.format(pattern.toString(), arguments); } - // ------------------------------------------------------------------------ bytes - - /** - * 编码字符串,编码为UTF-8 - * - * @param str 字符串 - * @return 编码后的字节码 - */ - public static byte[] utf8Bytes(final CharSequence str) { - return bytes(str, CharsetUtil.UTF_8); - } - - /** - * 编码字符串
- * 使用系统默认编码 - * - * @param str 字符串 - * @return 编码后的字节码 - */ - public static byte[] bytes(final CharSequence str) { - return bytes(str, Charset.defaultCharset()); - } - - /** - * 编码字符串 - * - * @param str 字符串 - * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 - * @return 编码后的字节码 - */ - public static byte[] bytes(final CharSequence str, final String charset) { - return bytes(str, isBlank(charset) ? Charset.defaultCharset() : Charset.forName(charset)); - } - - /** - * 编码字符串 - * - * @param str 字符串 - * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 - * @return 编码后的字节码 - */ - public static byte[] bytes(final CharSequence str, final Charset charset) { - if (str == null) { - return null; - } - - if (null == charset) { - return str.toString().getBytes(); - } - return str.toString().getBytes(charset); - } - - /** - * 字符串转换为byteBuffer - * - * @param str 字符串 - * @param charset 编码 - * @return byteBuffer - */ - public static ByteBuffer byteBuffer(final CharSequence str, final Charset charset) { - return ByteBuffer.wrap(bytes(str, charset)); - } + // endregion // ------------------------------------------------------------------------ wrap @@ -3219,7 +3158,7 @@ public class CharSequenceUtil extends StrChecker { if (str == null || isEmpty(prefix) || startWith(str, prefix, ignoreCase)) { return str(str); } - if (prefixes != null && prefixes.length > 0) { + if (ArrayUtil.isNotEmpty(prefixes)) { for (final CharSequence s : prefixes) { if (startWith(str, s, ignoreCase)) { return str.toString(); @@ -4190,4 +4129,54 @@ public class CharSequenceUtil extends StrChecker { } return str + repeat(fixedChar, fixedLength); } + + /** + * 获取两个字符串的公共前缀
+ *
{@code
+	 *     commonPrefix("abb", "acc") // "a"
+	 * }
+ * + * @param str1 字符串1 + * @param str2 字符串2 + * @return 字符串1和字符串2的公共前缀 + */ + public static CharSequence commonPrefix(final CharSequence str1, final CharSequence str2) { + if (isBlank(str1) || isBlank(str2)) { + return EMPTY; + } + final int minLength = Math.min(str1.length(), str2.length()); + int index = 0; + for (; index < minLength; index++) { + if (str1.charAt(index) != str2.charAt(index)) { + break; + } + } + return str1.subSequence(0, index); + } + + /** + * 获取两个字符串的公共后缀
+ *
{@code
+	 *     commonSuffix("aba", "cba") // "ba"
+	 * }
+ * + * @param str1 字符串1 + * @param str2 字符串2 + * @return 字符串1和字符串2的公共后缀 + */ + public static CharSequence commonSuffix(final CharSequence str1, final CharSequence str2) { + if (isBlank(str1) || isBlank(str2)) { + return EMPTY; + } + int str1Index = str1.length() - 1; + int str2Index = str2.length() - 1; + for (; str1Index >= 0 && str2Index >= 0; str1Index--, str2Index--) { + + if (str1.charAt(str1Index) != str2.charAt(str2Index)) { + break; + } + + } + return str1.subSequence(str1Index + 1, str1.length()); + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/text/StrUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/StrUtil.java index b3e63f3da..aa953c2ec 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/StrUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/StrUtil.java @@ -102,6 +102,7 @@ public class StrUtil extends CharSequenceUtil implements StrPool { } } + // region ----- str /** * 将对象转为字符串
* @@ -238,6 +239,7 @@ public class StrUtil extends CharSequenceUtil implements StrPool { } return charset.decode(data).toString(); } + // endregion /** * 调用对象的toString方法,null会返回“null” diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ByteUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ByteUtil.java index a58668b0e..439723342 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ByteUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ByteUtil.java @@ -5,6 +5,7 @@ import cn.hutool.core.math.NumberUtil; import java.math.BigDecimal; import java.math.BigInteger; import java.nio.ByteOrder; +import java.nio.charset.Charset; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.DoubleAdder; @@ -38,13 +39,41 @@ public class ByteUtil { */ public static final ByteOrder CPU_ENDIAN = "little".equals(System.getProperty("sun.cpu.endian")) ? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN; + /** + * 编码字符串,编码为UTF-8 + * + * @param str 字符串 + * @return 编码后的字节码 + */ + public static byte[] toUtf8Bytes(final CharSequence str) { + return toBytes(str, CharsetUtil.UTF_8); + } + + /** + * 编码字符串 + * + * @param str 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * @return 编码后的字节码 + */ + public static byte[] toBytes(final CharSequence str, final Charset charset) { + if (str == null) { + return null; + } + + if (null == charset) { + return str.toString().getBytes(); + } + return str.toString().getBytes(charset); + } + /** * int转byte * * @param intValue int值 * @return byte值 */ - public static byte intToByte(final int intValue) { + public static byte toByte(final int intValue) { return (byte) intValue; } @@ -55,7 +84,7 @@ public class ByteUtil { * @return 无符号int值 * @since 3.2.0 */ - public static int byteToUnsignedInt(final byte byteValue) { + public static int toUnsignedInt(final byte byteValue) { // Java 总是把 byte 当做有符处理;我们可以通过将其和 0xFF 进行二进制与得到它的无符值 return byteValue & 0xFF; } @@ -67,8 +96,8 @@ public class ByteUtil { * @param bytes byte数组 * @return short值 */ - public static short bytesToShort(final byte[] bytes) { - return bytesToShort(bytes, DEFAULT_ORDER); + public static short toShort(final byte[] bytes) { + return toShort(bytes, DEFAULT_ORDER); } /** @@ -79,8 +108,8 @@ public class ByteUtil { * @param byteOrder 端序 * @return short值 */ - public static short bytesToShort(final byte[] bytes, final ByteOrder byteOrder) { - return bytesToShort(bytes, 0, byteOrder); + public static short toShort(final byte[] bytes, final ByteOrder byteOrder) { + return toShort(bytes, 0, byteOrder); } /** @@ -92,7 +121,7 @@ public class ByteUtil { * @param byteOrder 端序 * @return short值 */ - public static short bytesToShort(final byte[] bytes, final int start, final ByteOrder byteOrder) { + public static short toShort(final byte[] bytes, final int start, final ByteOrder byteOrder) { if (ByteOrder.LITTLE_ENDIAN == byteOrder) { //小端模式,数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中 return (short) (bytes[start] & 0xff | (bytes[start + 1] & 0xff) << Byte.SIZE); @@ -108,8 +137,8 @@ public class ByteUtil { * @param shortValue short值 * @return byte数组 */ - public static byte[] shortToBytes(final short shortValue) { - return shortToBytes(shortValue, DEFAULT_ORDER); + public static byte[] toBytes(final short shortValue) { + return toBytes(shortValue, DEFAULT_ORDER); } /** @@ -120,7 +149,7 @@ public class ByteUtil { * @param byteOrder 端序 * @return byte数组 */ - public static byte[] shortToBytes(final short shortValue, final ByteOrder byteOrder) { + public static byte[] toBytes(final short shortValue, final ByteOrder byteOrder) { final byte[] b = new byte[Short.BYTES]; if (ByteOrder.LITTLE_ENDIAN == byteOrder) { b[0] = (byte) (shortValue & 0xff); @@ -139,8 +168,8 @@ public class ByteUtil { * @param bytes byte数组 * @return int值 */ - public static int bytesToInt(final byte[] bytes) { - return bytesToInt(bytes, DEFAULT_ORDER); + public static int toInt(final byte[] bytes) { + return toInt(bytes, DEFAULT_ORDER); } /** @@ -151,8 +180,8 @@ public class ByteUtil { * @param byteOrder 端序 * @return int值 */ - public static int bytesToInt(final byte[] bytes, final ByteOrder byteOrder) { - return bytesToInt(bytes, 0, byteOrder); + public static int toInt(final byte[] bytes, final ByteOrder byteOrder) { + return toInt(bytes, 0, byteOrder); } /** @@ -165,7 +194,7 @@ public class ByteUtil { * @return int值 * @since 5.7.21 */ - public static int bytesToInt(final byte[] bytes, final int start, final ByteOrder byteOrder) { + public static int toInt(final byte[] bytes, final int start, final ByteOrder byteOrder) { if (ByteOrder.LITTLE_ENDIAN == byteOrder) { return bytes[start] & 0xFF | // (bytes[1 + start] & 0xFF) << 8 | // @@ -187,8 +216,8 @@ public class ByteUtil { * @param intValue int值 * @return byte数组 */ - public static byte[] intToBytes(final int intValue) { - return intToBytes(intValue, DEFAULT_ORDER); + public static byte[] toBytes(final int intValue) { + return toBytes(intValue, DEFAULT_ORDER); } /** @@ -199,7 +228,7 @@ public class ByteUtil { * @param byteOrder 端序 * @return byte数组 */ - public static byte[] intToBytes(final int intValue, final ByteOrder byteOrder) { + public static byte[] toBytes(final int intValue, final ByteOrder byteOrder) { if (ByteOrder.LITTLE_ENDIAN == byteOrder) { return new byte[]{ // @@ -228,8 +257,8 @@ public class ByteUtil { * @param longValue long值 * @return byte数组 */ - public static byte[] longToBytes(final long longValue) { - return longToBytes(longValue, DEFAULT_ORDER); + public static byte[] toBytes(final long longValue) { + return toBytes(longValue, DEFAULT_ORDER); } /** @@ -241,7 +270,7 @@ public class ByteUtil { * @param byteOrder 端序 * @return byte数组 */ - public static byte[] longToBytes(long longValue, final ByteOrder byteOrder) { + public static byte[] toBytes(long longValue, final ByteOrder byteOrder) { final byte[] result = new byte[Long.BYTES]; if (ByteOrder.LITTLE_ENDIAN == byteOrder) { for (int i = 0; i < result.length; i++) { @@ -265,8 +294,8 @@ public class ByteUtil { * @param bytes byte数组 * @return long值 */ - public static long bytesToLong(final byte[] bytes) { - return bytesToLong(bytes, DEFAULT_ORDER); + public static long toLong(final byte[] bytes) { + return toLong(bytes, DEFAULT_ORDER); } /** @@ -278,8 +307,8 @@ public class ByteUtil { * @param byteOrder 端序 * @return long值 */ - public static long bytesToLong(final byte[] bytes, final ByteOrder byteOrder) { - return bytesToLong(bytes, 0, byteOrder); + public static long toLong(final byte[] bytes, final ByteOrder byteOrder) { + return toLong(bytes, 0, byteOrder); } /** @@ -293,7 +322,7 @@ public class ByteUtil { * @return long值 * @since 5.7.21 */ - public static long bytesToLong(final byte[] bytes, final int start, final ByteOrder byteOrder) { + public static long toLong(final byte[] bytes, final int start, final ByteOrder byteOrder) { long values = 0; if (ByteOrder.LITTLE_ENDIAN == byteOrder) { for (int i = (Long.BYTES - 1); i >= 0; i--) { @@ -317,8 +346,8 @@ public class ByteUtil { * @return byte数组 * @since 5.7.18 */ - public static byte[] floatToBytes(final float floatValue) { - return floatToBytes(floatValue, DEFAULT_ORDER); + public static byte[] toBytes(final float floatValue) { + return toBytes(floatValue, DEFAULT_ORDER); } /** @@ -329,8 +358,8 @@ public class ByteUtil { * @return byte数组 * @since 5.7.18 */ - public static byte[] floatToBytes(final float floatValue, final ByteOrder byteOrder) { - return intToBytes(Float.floatToIntBits(floatValue), byteOrder); + public static byte[] toBytes(final float floatValue, final ByteOrder byteOrder) { + return toBytes(Float.floatToIntBits(floatValue), byteOrder); } /** @@ -341,8 +370,8 @@ public class ByteUtil { * @return float值 * @since 5.7.18 */ - public static float bytesToFloat(final byte[] bytes) { - return bytesToFloat(bytes, DEFAULT_ORDER); + public static float toFloat(final byte[] bytes) { + return toFloat(bytes, DEFAULT_ORDER); } /** @@ -354,8 +383,8 @@ public class ByteUtil { * @return float值 * @since 5.7.18 */ - public static float bytesToFloat(final byte[] bytes, final ByteOrder byteOrder) { - return Float.intBitsToFloat(bytesToInt(bytes, byteOrder)); + public static float toFloat(final byte[] bytes, final ByteOrder byteOrder) { + return Float.intBitsToFloat(toInt(bytes, byteOrder)); } /** @@ -365,8 +394,8 @@ public class ByteUtil { * @param doubleValue double值 * @return byte数组 */ - public static byte[] doubleToBytes(final double doubleValue) { - return doubleToBytes(doubleValue, DEFAULT_ORDER); + public static byte[] toBytes(final double doubleValue) { + return toBytes(doubleValue, DEFAULT_ORDER); } /** @@ -378,8 +407,8 @@ public class ByteUtil { * @param byteOrder 端序 * @return byte数组 */ - public static byte[] doubleToBytes(final double doubleValue, final ByteOrder byteOrder) { - return longToBytes(Double.doubleToLongBits(doubleValue), byteOrder); + public static byte[] toBytes(final double doubleValue, final ByteOrder byteOrder) { + return toBytes(Double.doubleToLongBits(doubleValue), byteOrder); } /** @@ -389,8 +418,8 @@ public class ByteUtil { * @param bytes byte数组 * @return long值 */ - public static double bytesToDouble(final byte[] bytes) { - return bytesToDouble(bytes, DEFAULT_ORDER); + public static double toDouble(final byte[] bytes) { + return toDouble(bytes, DEFAULT_ORDER); } /** @@ -401,8 +430,8 @@ public class ByteUtil { * @param byteOrder 端序 * @return long值 */ - public static double bytesToDouble(final byte[] bytes, final ByteOrder byteOrder) { - return Double.longBitsToDouble(bytesToLong(bytes, byteOrder)); + public static double toDouble(final byte[] bytes, final ByteOrder byteOrder) { + return Double.longBitsToDouble(toLong(bytes, byteOrder)); } /** @@ -411,8 +440,8 @@ public class ByteUtil { * @param number 数字 * @return bytes */ - public static byte[] numberToBytes(final Number number) { - return numberToBytes(number, DEFAULT_ORDER); + public static byte[] toBytes(final Number number) { + return toBytes(number, DEFAULT_ORDER); } /** @@ -422,21 +451,23 @@ public class ByteUtil { * @param byteOrder 端序 * @return bytes */ - public static byte[] numberToBytes(final Number number, final ByteOrder byteOrder) { + public static byte[] toBytes(final Number number, final ByteOrder byteOrder) { if (number instanceof Byte) { return new byte[]{number.byteValue()}; } else if (number instanceof Double) { - return doubleToBytes((Double) number, byteOrder); + return toBytes(number.doubleValue(), byteOrder); } else if (number instanceof Long) { - return longToBytes((Long) number, byteOrder); + return toBytes(number.longValue(), byteOrder); } else if (number instanceof Integer) { - return intToBytes((Integer) number, byteOrder); + return ByteUtil.toBytes(number.intValue(), byteOrder); } else if (number instanceof Short) { - return shortToBytes((Short) number, byteOrder); + return ByteUtil.toBytes(number.shortValue(), byteOrder); } else if (number instanceof Float) { - return floatToBytes((Float) number, byteOrder); + return toBytes(number.floatValue(), byteOrder); + } else if(number instanceof BigInteger){ + return ((BigInteger) number).toByteArray(); } else { - return doubleToBytes(number.doubleValue(), byteOrder); + return toBytes(number.doubleValue(), byteOrder); } } @@ -451,39 +482,39 @@ public class ByteUtil { * @throws IllegalArgumentException 不支持的数字类型,如用户自定义数字类型 */ @SuppressWarnings("unchecked") - public static T bytesToNumber(final byte[] bytes, final Class targetClass, final ByteOrder byteOrder) throws IllegalArgumentException { + public static T toNumber(final byte[] bytes, final Class targetClass, final ByteOrder byteOrder) throws IllegalArgumentException { final Number number; if (Byte.class == targetClass) { number = bytes[0]; } else if (Short.class == targetClass) { - number = bytesToShort(bytes, byteOrder); + number = toShort(bytes, byteOrder); } else if (Integer.class == targetClass) { - number = bytesToInt(bytes, byteOrder); + number = toInt(bytes, byteOrder); } else if (AtomicInteger.class == targetClass) { - number = new AtomicInteger(bytesToInt(bytes, byteOrder)); + number = new AtomicInteger(toInt(bytes, byteOrder)); } else if (Long.class == targetClass) { - number = bytesToLong(bytes, byteOrder); + number = toLong(bytes, byteOrder); } else if (AtomicLong.class == targetClass) { - number = new AtomicLong(bytesToLong(bytes, byteOrder)); + number = new AtomicLong(toLong(bytes, byteOrder)); } else if (LongAdder.class == targetClass) { final LongAdder longValue = new LongAdder(); - longValue.add(bytesToLong(bytes, byteOrder)); + longValue.add(toLong(bytes, byteOrder)); number = longValue; } else if (Float.class == targetClass) { - number = bytesToFloat(bytes, byteOrder); + number = toFloat(bytes, byteOrder); } else if (Double.class == targetClass) { - number = bytesToDouble(bytes, byteOrder); + number = toDouble(bytes, byteOrder); } else if (DoubleAdder.class == targetClass) { final DoubleAdder doubleAdder = new DoubleAdder(); - doubleAdder.add(bytesToDouble(bytes, byteOrder)); + doubleAdder.add(toDouble(bytes, byteOrder)); number = doubleAdder; } else if (BigDecimal.class == targetClass) { - number = NumberUtil.toBigDecimal(bytesToDouble(bytes, byteOrder)); + number = NumberUtil.toBigDecimal(toDouble(bytes, byteOrder)); } else if (BigInteger.class == targetClass) { - number = BigInteger.valueOf(bytesToLong(bytes, byteOrder)); + number = BigInteger.valueOf(toLong(bytes, byteOrder)); } else if (Number.class == targetClass) { // 用户没有明确类型具体类型,默认Double - number = bytesToDouble(bytes, byteOrder); + number = toDouble(bytes, byteOrder); } else { // 用户自定义类型不支持 throw new IllegalArgumentException("Unsupported Number type: " + targetClass.getName()); @@ -491,4 +522,78 @@ public class ByteUtil { return (T) number; } + + /** + * 以无符号字节数组的形式返回传入值。 + * + * @param value 需要转换的值 + * @return 无符号bytes + * @since 4.5.0 + */ + public static byte[] toUnsignedByteArray(final BigInteger value) { + final byte[] bytes = value.toByteArray(); + + if (bytes[0] == 0) { + final byte[] tmp = new byte[bytes.length - 1]; + System.arraycopy(bytes, 1, tmp, 0, tmp.length); + + return tmp; + } + + return bytes; + } + + /** + * 以无符号字节数组的形式返回传入值。 + * + * @param length bytes长度 + * @param value 需要转换的值 + * @return 无符号bytes + * @since 4.5.0 + */ + public static byte[] toUnsignedByteArray(final int length, final BigInteger value) { + final byte[] bytes = value.toByteArray(); + if (bytes.length == length) { + return bytes; + } + + final int start = bytes[0] == 0 ? 1 : 0; + final int count = bytes.length - start; + + if (count > length) { + throw new IllegalArgumentException("standard length exceeded for value"); + } + + final byte[] tmp = new byte[length]; + System.arraycopy(bytes, start, tmp, tmp.length - count, count); + return tmp; + } + + /** + * 无符号bytes转{@link BigInteger} + * + * @param buf buf 无符号bytes + * @return {@link BigInteger} + * @since 4.5.0 + */ + public static BigInteger fromUnsignedByteArray(final byte[] buf) { + return new BigInteger(1, buf); + } + + /** + * 无符号bytes转{@link BigInteger} + * + * @param buf 无符号bytes + * @param off 起始位置 + * @param length 长度 + * @return {@link BigInteger} + */ + public static BigInteger fromUnsignedByteArray(final byte[] buf, final int off, final int length) { + byte[] mag = buf; + if (off != 0 || length != buf.length) { + mag = new byte[length]; + System.arraycopy(buf, off, mag, 0, length); + } + return new BigInteger(1, mag); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/codec/Base32Test.java b/hutool-core/src/test/java/cn/hutool/core/codec/Base32Test.java index cb6effd74..1ac4015cc 100644 --- a/hutool-core/src/test/java/cn/hutool/core/codec/Base32Test.java +++ b/hutool-core/src/test/java/cn/hutool/core/codec/Base32Test.java @@ -1,8 +1,8 @@ package cn.hutool.core.codec; import cn.hutool.core.codec.binary.Base32; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.text.StrUtil; import org.junit.Assert; import org.junit.Test; @@ -25,7 +25,7 @@ public class Base32Test { @Test public void hexEncodeAndDecodeTest(){ final String a = "伦家是一个非常长的字符串"; - final String encode = Base32.encodeHex(StrUtil.utf8Bytes(a)); + final String encode = Base32.encodeHex(ByteUtil.toUtf8Bytes(a)); Assert.assertEquals("SIUADPDEMRJ9HBV4N20E9E5AT6EPTPDON3KPBFV7JA2EBBCNSUMADP5OM8======", encode); String decodeStr = Base32.decodeStrHex(encode); diff --git a/hutool-core/src/test/java/cn/hutool/core/codec/Base64Test.java b/hutool-core/src/test/java/cn/hutool/core/codec/Base64Test.java index 103fc4a2a..fe88cddee 100644 --- a/hutool-core/src/test/java/cn/hutool/core/codec/Base64Test.java +++ b/hutool-core/src/test/java/cn/hutool/core/codec/Base64Test.java @@ -1,9 +1,9 @@ package cn.hutool.core.codec; import cn.hutool.core.codec.binary.Base64; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.text.StrUtil; import org.junit.Assert; import org.junit.Test; @@ -45,7 +45,7 @@ public class Base64Test { @Test public void encodeAndDecodeWithoutPaddingTest() { final String a = "伦家是一个非常长的字符串66"; - final String encode = Base64.encodeWithoutPadding(StrUtil.utf8Bytes(a)); + final String encode = Base64.encodeWithoutPadding(ByteUtil.toUtf8Bytes(a)); Assert.assertEquals("5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5LiyNjY", encode); final String decodeStr = Base64.decodeStr(encode); diff --git a/hutool-core/src/test/java/cn/hutool/core/codec/hash/CityHashTest.java b/hutool-core/src/test/java/cn/hutool/core/codec/hash/CityHashTest.java index d48547415..84230909f 100755 --- a/hutool-core/src/test/java/cn/hutool/core/codec/hash/CityHashTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/codec/hash/CityHashTest.java @@ -1,6 +1,6 @@ package cn.hutool.core.codec.hash; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import org.junit.Assert; import org.junit.Test; @@ -9,30 +9,30 @@ public class CityHashTest { @Test public void hash32Test() { final CityHash cityHash = CityHash.INSTANCE; - int hv = cityHash.hash32(StrUtil.utf8Bytes("你")); + int hv = cityHash.hash32(ByteUtil.toUtf8Bytes("你")); Assert.assertEquals(1290029860, hv); - hv = cityHash.hash32(StrUtil.utf8Bytes("你好")); + hv = cityHash.hash32(ByteUtil.toUtf8Bytes("你好")); Assert.assertEquals(1374181357, hv); - hv = cityHash.hash32(StrUtil.utf8Bytes("见到你很高兴")); + hv = cityHash.hash32(ByteUtil.toUtf8Bytes("见到你很高兴")); Assert.assertEquals(1475516842, hv); - hv = cityHash.hash32(StrUtil.utf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); + hv = cityHash.hash32(ByteUtil.toUtf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); Assert.assertEquals(0x51020cae, hv); } @Test public void hash64Test() { final CityHash cityHash = CityHash.INSTANCE; - long hv = cityHash.hash64(StrUtil.utf8Bytes("你")); + long hv = cityHash.hash64(ByteUtil.toUtf8Bytes("你")); Assert.assertEquals(-4296898700418225525L, hv); - hv = cityHash.hash64(StrUtil.utf8Bytes("你好")); + hv = cityHash.hash64(ByteUtil.toUtf8Bytes("你好")); Assert.assertEquals(-4294276205456761303L, hv); - hv = cityHash.hash64(StrUtil.utf8Bytes("见到你很高兴")); + hv = cityHash.hash64(ByteUtil.toUtf8Bytes("见到你很高兴")); Assert.assertEquals(272351505337503793L, hv); - hv = cityHash.hash64(StrUtil.utf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); + hv = cityHash.hash64(ByteUtil.toUtf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); Assert.assertEquals(-8234735310919228703L, hv); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/codec/hash/MurmurHashTest.java b/hutool-core/src/test/java/cn/hutool/core/codec/hash/MurmurHashTest.java index 68c4a25ea..bf965d118 100755 --- a/hutool-core/src/test/java/cn/hutool/core/codec/hash/MurmurHashTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/codec/hash/MurmurHashTest.java @@ -1,6 +1,6 @@ package cn.hutool.core.codec.hash; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import org.junit.Assert; import org.junit.Test; @@ -8,29 +8,29 @@ public class MurmurHashTest { @Test public void hash32Test() { - int hv = MurmurHash.INSTANCE.hash32(StrUtil.utf8Bytes("你")); + int hv = MurmurHash.INSTANCE.hash32(ByteUtil.toUtf8Bytes("你")); Assert.assertEquals(-1898877446, hv); - hv = MurmurHash.INSTANCE.hash32(StrUtil.utf8Bytes("你好")); + hv = MurmurHash.INSTANCE.hash32(ByteUtil.toUtf8Bytes("你好")); Assert.assertEquals(337357348, hv); - hv = MurmurHash.INSTANCE.hash32(StrUtil.utf8Bytes("见到你很高兴")); + hv = MurmurHash.INSTANCE.hash32(ByteUtil.toUtf8Bytes("见到你很高兴")); Assert.assertEquals(1101306141, hv); - hv = MurmurHash.INSTANCE.hash32(StrUtil.utf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); + hv = MurmurHash.INSTANCE.hash32(ByteUtil.toUtf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); Assert.assertEquals(-785444229, hv); } @Test public void hash64Test() { - long hv = MurmurHash.INSTANCE.hash64(StrUtil.utf8Bytes("你")); + long hv = MurmurHash.INSTANCE.hash64(ByteUtil.toUtf8Bytes("你")); Assert.assertEquals(-1349759534971957051L, hv); - hv = MurmurHash.INSTANCE.hash64(StrUtil.utf8Bytes("你好")); + hv = MurmurHash.INSTANCE.hash64(ByteUtil.toUtf8Bytes("你好")); Assert.assertEquals(-7563732748897304996L, hv); - hv = MurmurHash.INSTANCE.hash64(StrUtil.utf8Bytes("见到你很高兴")); + hv = MurmurHash.INSTANCE.hash64(ByteUtil.toUtf8Bytes("见到你很高兴")); Assert.assertEquals(-766658210119995316L, hv); - hv = MurmurHash.INSTANCE.hash64(StrUtil.utf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); + hv = MurmurHash.INSTANCE.hash64(ByteUtil.toUtf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); Assert.assertEquals(-7469283059271653317L, hv); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHash128Test.java b/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHash128Test.java index b15f4359a..a66418905 100644 --- a/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHash128Test.java +++ b/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHash128Test.java @@ -2,7 +2,7 @@ package cn.hutool.core.codec.hash.metro; import cn.hutool.core.codec.HexUtil; import cn.hutool.core.codec.Number128; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import org.junit.Assert; import org.junit.Test; @@ -89,7 +89,7 @@ public class MetroHash128Test { } static final byte[] ENDIAN = - StrUtil.utf8Bytes("012345678901234567890123456789012345678901234567890123456789012"); + ByteUtil.toUtf8Bytes("012345678901234567890123456789012345678901234567890123456789012"); @Test public void testLittleEndian() { @@ -106,7 +106,7 @@ public class MetroHash128Test { } static String h128(final String input) { - final MetroHash128 mh = MetroHash128.of(0).apply(ByteBuffer.wrap(StrUtil.utf8Bytes(input))); + final MetroHash128 mh = MetroHash128.of(0).apply(ByteBuffer.wrap(ByteUtil.toUtf8Bytes(input))); final Number128 hash = mh.get(); return hex(hash.getHighValue()) + hex(hash.getLowValue()); } diff --git a/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHash64Test.java b/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHash64Test.java index 906db1b80..b1fa2c42b 100644 --- a/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHash64Test.java +++ b/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHash64Test.java @@ -1,7 +1,7 @@ package cn.hutool.core.codec.hash.metro; import cn.hutool.core.codec.HexUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import org.junit.Assert; import org.junit.Test; @@ -92,7 +92,7 @@ public class MetroHash64Test { } static final byte[] ENDIAN = - StrUtil.utf8Bytes("012345678901234567890123456789012345678901234567890123456789012"); + ByteUtil.toUtf8Bytes("012345678901234567890123456789012345678901234567890123456789012"); @Test public void testLittleEndian() { @@ -109,7 +109,7 @@ public class MetroHash64Test { } private String h64(final String value) { - return HexUtil.toHex(MetroHash64.of(0).hash64(StrUtil.utf8Bytes(value))).toUpperCase(); + return HexUtil.toHex(MetroHash64.of(0).hash64(ByteUtil.toUtf8Bytes(value))).toUpperCase(); } private static String hex(final byte[] bytes){ diff --git a/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHashTest.java b/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHashTest.java index a89dceced..5f15ba817 100644 --- a/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHashTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/codec/hash/metro/MetroHashTest.java @@ -3,7 +3,7 @@ package cn.hutool.core.codec.hash.metro; import cn.hutool.core.codec.HexUtil; import cn.hutool.core.codec.hash.CityHash; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.RandomUtil; import org.junit.Assert; @@ -17,7 +17,7 @@ public class MetroHashTest { @Test public void testEmpty() { - Assert.assertEquals("705fb008071e967d", HexUtil.toHex(MetroHash64.of(0).hash64(StrUtil.utf8Bytes("")))); + Assert.assertEquals("705fb008071e967d", HexUtil.toHex(MetroHash64.of(0).hash64(ByteUtil.toUtf8Bytes("")))); } @Test @@ -60,7 +60,7 @@ public class MetroHashTest { final long startMetro = System.currentTimeMillis(); for (final String s : strArray) { - MetroHash64.of(0).hash64(StrUtil.utf8Bytes(s)); + MetroHash64.of(0).hash64(ByteUtil.toUtf8Bytes(s)); } final long endMetro = System.currentTimeMillis(); @@ -84,7 +84,7 @@ public class MetroHashTest { final long startMetro = System.currentTimeMillis(); for (final String s : strArray) { - MetroHash128.of(0).hash128(StrUtil.utf8Bytes(s)); + MetroHash128.of(0).hash128(ByteUtil.toUtf8Bytes(s)); } final long endMetro = System.currentTimeMillis(); @@ -103,6 +103,6 @@ public class MetroHashTest { } private String h64(final String value) { - return HexUtil.toHex(MetroHash64.of(0).hash64(StrUtil.utf8Bytes(value))).toUpperCase(); + return HexUtil.toHex(MetroHash64.of(0).hash64(ByteUtil.toUtf8Bytes(value))).toUpperCase(); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertTest.java index 96db50c8e..013da7b41 100755 --- a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertTest.java @@ -290,7 +290,7 @@ public class ConvertTest { public void numberToByteArrayTest(){ // 测试Serializable转换为bytes,调用序列化转换 final byte[] bytes = Convert.toPrimitiveByteArray(12L); - Assert.assertArrayEquals(ByteUtil.longToBytes(12L), bytes); + Assert.assertArrayEquals(ByteUtil.toBytes(12L), bytes); } @Test diff --git a/hutool-core/src/test/java/cn/hutool/core/io/checksum/CrcTest.java b/hutool-core/src/test/java/cn/hutool/core/io/checksum/CrcTest.java index cd7276807..d411fd1f2 100755 --- a/hutool-core/src/test/java/cn/hutool/core/io/checksum/CrcTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/checksum/CrcTest.java @@ -1,8 +1,8 @@ package cn.hutool.core.io.checksum; -import cn.hutool.core.io.checksum.crc16.CRC16XModem; import cn.hutool.core.codec.HexUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.io.checksum.crc16.CRC16XModem; +import cn.hutool.core.util.ByteUtil; import org.junit.Assert; import org.junit.Test; @@ -48,7 +48,7 @@ public class CrcTest { // I3B3RV@Gitee final String text = "000123FFFFFF"; final CRC16XModem crc16 = new CRC16XModem(); - crc16.update(StrUtil.bytes(text)); + crc16.update(ByteUtil.toUtf8Bytes(text)); final String hexValue = crc16.getHexValue(true); Assert.assertEquals("0e04", hexValue); } diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaFactoryTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaFactoryTest.java index db3f68ab3..1f066bfe9 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaFactoryTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaFactoryTest.java @@ -158,12 +158,13 @@ public class LambdaFactoryTest { loop(count, tasks); } + @SuppressWarnings("unchecked") @Test public void testConstructor() { - Constructor constructor = ((SerSupplier>) Something.class::getConstructor).get(); - Supplier constructorLambda = LambdaFactory.build(Supplier.class, constructor); + final Constructor constructor = ((SerSupplier>) Something.class::getConstructor).get(); + final Supplier constructorLambda = LambdaFactory.build(Supplier.class, constructor); // constructorLambda can be cache or transfer - Something something = constructorLambda.get(); + final Something something = constructorLambda.get(); Assert.assertEquals(Something.class, something.getClass()); } diff --git a/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java index c24d3546b..856025db0 100755 --- a/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java @@ -220,4 +220,52 @@ public class CharSequenceUtilTest { final String str = "A5E6005700000000000000000000000000000000000000090D0100000000000001003830"; Assert.assertEquals("38", StrUtil.subByLength(str,-2,2)); } + + @Test + public void commonPrefixTest() { + + // -------------------------- None match ----------------------- + + Assert.assertEquals("", CharSequenceUtil.commonPrefix("", "abc")); + Assert.assertEquals("", CharSequenceUtil.commonPrefix(null, "abc")); + Assert.assertEquals("", CharSequenceUtil.commonPrefix("abc", null)); + Assert.assertEquals("", CharSequenceUtil.commonPrefix("abc", "")); + + Assert.assertEquals("", CharSequenceUtil.commonPrefix("azzzj", "bzzzj")); + + Assert.assertEquals("", CharSequenceUtil.commonPrefix("english中文", "french中文")); + + // -------------------------- Matched ----------------------- + + Assert.assertEquals("name_", CharSequenceUtil.commonPrefix("name_abc", "name_efg")); + + Assert.assertEquals("zzzj", CharSequenceUtil.commonPrefix("zzzja", "zzzjb")); + + Assert.assertEquals("中文", CharSequenceUtil.commonPrefix("中文english", "中文french")); + + } + + @Test + public void commonSuffixTest() { + + // -------------------------- None match ----------------------- + + Assert.assertEquals("", CharSequenceUtil.commonSuffix("", "abc")); + Assert.assertEquals("", CharSequenceUtil.commonSuffix(null, "abc")); + Assert.assertEquals("", CharSequenceUtil.commonSuffix("abc", null)); + Assert.assertEquals("", CharSequenceUtil.commonSuffix("abc", "")); + + Assert.assertEquals("", CharSequenceUtil.commonSuffix("zzzja", "zzzjb")); + + Assert.assertEquals("", CharSequenceUtil.commonSuffix("中文english", "中文Korean")); + + // -------------------------- Matched ----------------------- + + Assert.assertEquals("_name", CharSequenceUtil.commonSuffix("abc_name", "efg_name")); + + Assert.assertEquals("zzzj", CharSequenceUtil.commonSuffix("abczzzj", "efgzzzj")); + + Assert.assertEquals("中文", CharSequenceUtil.commonSuffix("english中文", "Korean中文")); + + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ByteUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ByteUtilTest.java index 29a1ec5ed..848c482fe 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ByteUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ByteUtilTest.java @@ -17,18 +17,18 @@ public class ByteUtilTest { buffer.putInt(int1); final byte[] bytesIntFromBuffer = buffer.array(); - final byte[] bytesInt = ByteUtil.intToBytes(int1, ByteOrder.LITTLE_ENDIAN); + final byte[] bytesInt = ByteUtil.toBytes(int1, ByteOrder.LITTLE_ENDIAN); Assert.assertArrayEquals(bytesIntFromBuffer, bytesInt); - final int int2 = ByteUtil.bytesToInt(bytesInt, ByteOrder.LITTLE_ENDIAN); + final int int2 = ByteUtil.toInt(bytesInt, ByteOrder.LITTLE_ENDIAN); Assert.assertEquals(int1, int2); - final byte[] bytesInt2 = ByteUtil.intToBytes(int1, ByteOrder.LITTLE_ENDIAN); - final int int3 = ByteUtil.bytesToInt(bytesInt2, ByteOrder.LITTLE_ENDIAN); + final byte[] bytesInt2 = ByteUtil.toBytes(int1, ByteOrder.LITTLE_ENDIAN); + final int int3 = ByteUtil.toInt(bytesInt2, ByteOrder.LITTLE_ENDIAN); Assert.assertEquals(int1, int3); - final byte[] bytesInt3 = ByteUtil.intToBytes(int1, ByteOrder.LITTLE_ENDIAN); - final int int4 = ByteUtil.bytesToInt(bytesInt3, ByteOrder.LITTLE_ENDIAN); + final byte[] bytesInt3 = ByteUtil.toBytes(int1, ByteOrder.LITTLE_ENDIAN); + final int int4 = ByteUtil.toInt(bytesInt3, ByteOrder.LITTLE_ENDIAN); Assert.assertEquals(int1, int4); } @@ -41,11 +41,11 @@ public class ByteUtilTest { buffer.putInt(int2); final byte[] bytesIntFromBuffer = buffer.array(); - final byte[] bytesInt = ByteUtil.intToBytes(int2, ByteOrder.BIG_ENDIAN); + final byte[] bytesInt = ByteUtil.toBytes(int2, ByteOrder.BIG_ENDIAN); Assert.assertArrayEquals(bytesIntFromBuffer, bytesInt); // 测试大端序 byte 数组转 int - final int int3 = ByteUtil.bytesToInt(bytesInt, ByteOrder.BIG_ENDIAN); + final int int3 = ByteUtil.toInt(bytesInt, ByteOrder.BIG_ENDIAN); Assert.assertEquals(int2, int3); } @@ -59,18 +59,18 @@ public class ByteUtilTest { buffer.putLong(long1); final byte[] bytesLongFromBuffer = buffer.array(); - final byte[] bytesLong = ByteUtil.longToBytes(long1, ByteOrder.LITTLE_ENDIAN); + final byte[] bytesLong = ByteUtil.toBytes(long1, ByteOrder.LITTLE_ENDIAN); Assert.assertArrayEquals(bytesLongFromBuffer, bytesLong); - final long long2 = ByteUtil.bytesToLong(bytesLong, ByteOrder.LITTLE_ENDIAN); + final long long2 = ByteUtil.toLong(bytesLong, ByteOrder.LITTLE_ENDIAN); Assert.assertEquals(long1, long2); - final byte[] bytesLong2 = ByteUtil.longToBytes(long1); - final long long3 = ByteUtil.bytesToLong(bytesLong2, ByteOrder.LITTLE_ENDIAN); + final byte[] bytesLong2 = ByteUtil.toBytes(long1); + final long long3 = ByteUtil.toLong(bytesLong2, ByteOrder.LITTLE_ENDIAN); Assert.assertEquals(long1, long3); - final byte[] bytesLong3 = ByteUtil.longToBytes(long1, ByteOrder.LITTLE_ENDIAN); - final long long4 = ByteUtil.bytesToLong(bytesLong3); + final byte[] bytesLong3 = ByteUtil.toBytes(long1, ByteOrder.LITTLE_ENDIAN); + final long long4 = ByteUtil.toLong(bytesLong3); Assert.assertEquals(long1, long4); } @@ -83,10 +83,10 @@ public class ByteUtilTest { buffer.putLong(long1); final byte[] bytesLongFromBuffer = buffer.array(); - final byte[] bytesLong = ByteUtil.longToBytes(long1, ByteOrder.BIG_ENDIAN); + final byte[] bytesLong = ByteUtil.toBytes(long1, ByteOrder.BIG_ENDIAN); Assert.assertArrayEquals(bytesLongFromBuffer, bytesLong); - final long long2 = ByteUtil.bytesToLong(bytesLong, ByteOrder.BIG_ENDIAN); + final long long2 = ByteUtil.toLong(bytesLong, ByteOrder.BIG_ENDIAN); Assert.assertEquals(long1, long2); } @@ -95,8 +95,8 @@ public class ByteUtilTest { // 测试 long 转 byte 数组 final float f1 = (float) RandomUtil.randomDouble(); - final byte[] bytesLong = ByteUtil.floatToBytes(f1, ByteOrder.LITTLE_ENDIAN); - final float f2 = ByteUtil.bytesToFloat(bytesLong, ByteOrder.LITTLE_ENDIAN); + final byte[] bytesLong = ByteUtil.toBytes(f1, ByteOrder.LITTLE_ENDIAN); + final float f2 = ByteUtil.toFloat(bytesLong, ByteOrder.LITTLE_ENDIAN); Assert.assertEquals(f1, f2, 0); } @@ -105,8 +105,8 @@ public class ByteUtilTest { // 测试大端序 long 转 byte 数组 final float f1 = (float) RandomUtil.randomDouble(); - final byte[] bytesLong = ByteUtil.floatToBytes(f1, ByteOrder.BIG_ENDIAN); - final float f2 = ByteUtil.bytesToFloat(bytesLong, ByteOrder.BIG_ENDIAN); + final byte[] bytesLong = ByteUtil.toBytes(f1, ByteOrder.BIG_ENDIAN); + final float f2 = ByteUtil.toFloat(bytesLong, ByteOrder.BIG_ENDIAN); Assert.assertEquals(f1, f2, 0); } @@ -115,24 +115,24 @@ public class ByteUtilTest { public void shortAndBytesLittleEndianTest() { final short short1 = (short) RandomUtil.randomInt(); - final byte[] bytes = ByteUtil.shortToBytes(short1, ByteOrder.LITTLE_ENDIAN); - final short short2 = ByteUtil.bytesToShort(bytes, ByteOrder.LITTLE_ENDIAN); + final byte[] bytes = ByteUtil.toBytes(short1, ByteOrder.LITTLE_ENDIAN); + final short short2 = ByteUtil.toShort(bytes, ByteOrder.LITTLE_ENDIAN); Assert.assertEquals(short2, short1); - final byte[] bytes2 = ByteUtil.shortToBytes(short1); - final short short3 = ByteUtil.bytesToShort(bytes2, ByteOrder.LITTLE_ENDIAN); + final byte[] bytes2 = ByteUtil.toBytes(short1); + final short short3 = ByteUtil.toShort(bytes2, ByteOrder.LITTLE_ENDIAN); Assert.assertEquals(short3, short1); - final byte[] bytes3 = ByteUtil.shortToBytes(short1, ByteOrder.LITTLE_ENDIAN); - final short short4 = ByteUtil.bytesToShort(bytes3); + final byte[] bytes3 = ByteUtil.toBytes(short1, ByteOrder.LITTLE_ENDIAN); + final short short4 = ByteUtil.toShort(bytes3); Assert.assertEquals(short4, short1); } @Test public void shortAndBytesBigEndianTest() { final short short1 = 122; - final byte[] bytes = ByteUtil.shortToBytes(short1, ByteOrder.BIG_ENDIAN); - final short short2 = ByteUtil.bytesToShort(bytes, ByteOrder.BIG_ENDIAN); + final byte[] bytes = ByteUtil.toBytes(short1, ByteOrder.BIG_ENDIAN); + final short short2 = ByteUtil.toShort(bytes, ByteOrder.BIG_ENDIAN); Assert.assertEquals(short2, short1); } @@ -140,12 +140,12 @@ public class ByteUtilTest { @Test public void bytesToLongTest(){ final long a = RandomUtil.randomLong(0, Long.MAX_VALUE); - ByteBuffer wrap = ByteBuffer.wrap(ByteUtil.longToBytes(a)); + ByteBuffer wrap = ByteBuffer.wrap(ByteUtil.toBytes(a)); wrap.order(ByteOrder.LITTLE_ENDIAN); long aLong = wrap.getLong(); Assert.assertEquals(a, aLong); - wrap = ByteBuffer.wrap(ByteUtil.longToBytes(a, ByteOrder.BIG_ENDIAN)); + wrap = ByteBuffer.wrap(ByteUtil.toBytes(a, ByteOrder.BIG_ENDIAN)); wrap.order(ByteOrder.BIG_ENDIAN); aLong = wrap.getLong(); Assert.assertEquals(a, aLong); @@ -154,12 +154,12 @@ public class ByteUtilTest { @Test public void bytesToIntTest(){ final int a = RandomUtil.randomInt(0, Integer.MAX_VALUE); - ByteBuffer wrap = ByteBuffer.wrap(ByteUtil.intToBytes(a)); + ByteBuffer wrap = ByteBuffer.wrap(ByteUtil.toBytes(a)); wrap.order(ByteOrder.LITTLE_ENDIAN); int aInt = wrap.getInt(); Assert.assertEquals(a, aInt); - wrap = ByteBuffer.wrap(ByteUtil.intToBytes(a, ByteOrder.BIG_ENDIAN)); + wrap = ByteBuffer.wrap(ByteUtil.toBytes(a, ByteOrder.BIG_ENDIAN)); wrap.order(ByteOrder.BIG_ENDIAN); aInt = wrap.getInt(); Assert.assertEquals(a, aInt); @@ -169,12 +169,12 @@ public class ByteUtilTest { public void bytesToShortTest(){ final short a = (short) RandomUtil.randomInt(0, Short.MAX_VALUE); - ByteBuffer wrap = ByteBuffer.wrap(ByteUtil.shortToBytes(a)); + ByteBuffer wrap = ByteBuffer.wrap(ByteUtil.toBytes(a)); wrap.order(ByteOrder.LITTLE_ENDIAN); short aShort = wrap.getShort(); Assert.assertEquals(a, aShort); - wrap = ByteBuffer.wrap(ByteUtil.shortToBytes(a, ByteOrder.BIG_ENDIAN)); + wrap = ByteBuffer.wrap(ByteUtil.toBytes(a, ByteOrder.BIG_ENDIAN)); wrap.order(ByteOrder.BIG_ENDIAN); aShort = wrap.getShort(); Assert.assertEquals(a, aShort); diff --git a/hutool-core/src/test/java/cn/hutool/core/util/HashUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/HashUtilTest.java index 66002e92b..b169eedac 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/HashUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/HashUtilTest.java @@ -1,7 +1,6 @@ package cn.hutool.core.util; import cn.hutool.core.codec.hash.HashUtil; -import cn.hutool.core.text.StrUtil; import org.junit.Assert; import org.junit.Test; @@ -10,7 +9,7 @@ public class HashUtilTest { @Test public void cityHash128Test(){ final String s="Google发布的Hash计算算法:CityHash64 与 CityHash128"; - final long[] hash = HashUtil.cityHash128(StrUtil.utf8Bytes(s)); + final long[] hash = HashUtil.cityHash128(ByteUtil.toUtf8Bytes(s)); Assert.assertEquals(0x5944f1e788a18db0L, hash[0]); Assert.assertEquals(0xc2f68d8b2bf4a5cfL, hash[1]); } @@ -18,14 +17,14 @@ public class HashUtilTest { @Test public void cityHash64Test(){ final String s="Google发布的Hash计算算法:CityHash64 与 CityHash128"; - final long hash = HashUtil.cityHash64(StrUtil.utf8Bytes(s)); + final long hash = HashUtil.cityHash64(ByteUtil.toUtf8Bytes(s)); Assert.assertEquals(0x1d408f2bbf967e2aL, hash); } @Test public void cityHash32Test(){ final String s="Google发布的Hash计算算法:CityHash64 与 CityHash128"; - final int hash = HashUtil.cityHash32(StrUtil.utf8Bytes(s)); + final int hash = HashUtil.cityHash32(ByteUtil.toUtf8Bytes(s)); Assert.assertEquals(0xa8944fbe, hash); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java index aa76ecd97..d5d782c48 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java @@ -2,6 +2,7 @@ package cn.hutool.core.util; import cn.hutool.core.lang.Console; import cn.hutool.core.math.NumberUtil; +import cn.hutool.core.text.StrUtil; import org.junit.Assert; import org.junit.Test; @@ -10,6 +11,10 @@ import java.math.RoundingMode; import java.text.NumberFormat; import java.text.ParseException; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; + /** * {@link NumberUtil} 单元测试类 * @@ -412,6 +417,23 @@ public class NumberUtilTest { NumberUtil.parseInt(numberStr); } + @Test + public void parseIntTest5() { + + // -------------------------- Parse failed ----------------------- + + assertThat(NumberUtil.parseInt("abc", null), nullValue()); + + assertThat(NumberUtil.parseInt("abc", 456), equalTo(456)); + + // -------------------------- Parse success ----------------------- + + assertThat(NumberUtil.parseInt("123.abc", 789), equalTo(123)); + + assertThat(NumberUtil.parseInt("123.3", null), equalTo(123)); + + } + @Test public void parseNumberTest() { // from 5.4.8 issue#I23ORQ@Gitee @@ -432,6 +454,29 @@ public class NumberUtilTest { Assert.assertTrue(number instanceof BigDecimal); } + @Test + public void parseNumberTest3(){ + + // -------------------------- Parse failed ----------------------- + + assertThat(NumberUtil.parseNumber("abc", null), nullValue()); + + assertThat(NumberUtil.parseNumber(StrUtil.EMPTY, null), nullValue()); + + assertThat(NumberUtil.parseNumber(StrUtil.repeat(StrUtil.SPACE, 10), null), nullValue()); + + assertThat(NumberUtil.parseNumber("abc", 456).intValue(), equalTo(456)); + + // -------------------------- Parse success ----------------------- + + assertThat(NumberUtil.parseNumber("123.abc", 789).intValue(), equalTo(123)); + + assertThat(NumberUtil.parseNumber("123.3", null).doubleValue(), equalTo(123.3D)); + + assertThat(NumberUtil.parseNumber("0.123.3", null).doubleValue(), equalTo(0.123D)); + + } + @Test public void parseHexNumberTest() { // 千位分隔符去掉 @@ -470,6 +515,27 @@ public class NumberUtilTest { Assert.assertEquals(0, number); } + @Test + public void parseLongTest2() { + + // -------------------------- Parse failed ----------------------- + + final Long v1 = NumberUtil.parseLong(null, null); + assertThat(v1, nullValue()); + + final Long v2 = NumberUtil.parseLong(StrUtil.EMPTY, null); + assertThat(v2, nullValue()); + + final Long v3 = NumberUtil.parseLong("L3221", 1233L); + assertThat(v3, equalTo(1233L)); + + // -------------------------- Parse success ----------------------- + + final Long v4 = NumberUtil.parseLong("1233L", null); + assertThat(v4, equalTo(1233L)); + + } + @Test public void isPowerOfTwoTest() { Assert.assertFalse(NumberUtil.isPowerOfTwo(-1)); @@ -585,4 +651,46 @@ public class NumberUtilTest { Assert.assertFalse(NumberUtil.isPrime(296733)); Assert.assertFalse(NumberUtil.isPrime(20_4123_2399)); } + + @Test + public void parseFloatTest() { + + // -------------------------- Parse failed ----------------------- + + assertThat(NumberUtil.parseFloat("abc", null), nullValue()); + + assertThat(NumberUtil.parseFloat("a123.33", null), nullValue()); + + assertThat(NumberUtil.parseFloat("..123", null), nullValue()); + + assertThat(NumberUtil.parseFloat(StrUtil.EMPTY, 1233F), equalTo(1233F)); + + // -------------------------- Parse success ----------------------- + + assertThat(NumberUtil.parseFloat("123.33a", null), equalTo(123.33F)); + + assertThat(NumberUtil.parseFloat(".123", null), equalTo(0.123F)); + + } + + @Test + public void parseDoubleTest() { + + // -------------------------- Parse failed ----------------------- + + assertThat(NumberUtil.parseDouble("abc", null), nullValue()); + + assertThat(NumberUtil.parseDouble("a123.33", null), nullValue()); + + assertThat(NumberUtil.parseDouble("..123", null), nullValue()); + + assertThat(NumberUtil.parseDouble(StrUtil.EMPTY, 1233D), equalTo(1233D)); + + // -------------------------- Parse success ----------------------- + + assertThat(NumberUtil.parseDouble("123.33a", null), equalTo(123.33D)); + + assertThat(NumberUtil.parseDouble(".123", null), equalTo(0.123D)); + + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java index eba84fa3a..86e99d379 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java @@ -120,7 +120,7 @@ public class ZipUtilTest { @Test public void gzipTest() { final String data = "我是一个需要压缩的很长很长的字符串"; - final byte[] bytes = StrUtil.utf8Bytes(data); + final byte[] bytes = ByteUtil.toUtf8Bytes(data); final byte[] gzip = ZipUtil.gzip(bytes); //保证gzip长度正常 @@ -134,7 +134,7 @@ public class ZipUtilTest { @Test public void zlibTest() { final String data = "我是一个需要压缩的很长很长的字符串"; - final byte[] bytes = StrUtil.utf8Bytes(data); + final byte[] bytes = ByteUtil.toUtf8Bytes(data); byte[] gzip = ZipUtil.zlib(bytes, 0); //保证zlib长度正常 @@ -203,12 +203,12 @@ public class ZipUtilTest { @Test @Ignore public void sizeUnzip() throws IOException { - String zipPath = "F:\\BaiduNetdiskDownload\\demo.zip"; - String outPath = "F:\\BaiduNetdiskDownload\\test"; - ZipFile zipFile = new ZipFile(zipPath, Charset.forName("GBK")); - File file = new File(outPath); + final String zipPath = "F:\\BaiduNetdiskDownload\\demo.zip"; + final String outPath = "F:\\BaiduNetdiskDownload\\test"; + final ZipFile zipFile = new ZipFile(zipPath, Charset.forName("GBK")); + final File file = new File(outPath); // 限制解压文件大小为637KB - long size = 637*1024L; + final long size = 637*1024L; // 限制解压文件大小为636KB // long size = 636*1024L; diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java index ff9a73048..b5f40600e 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java @@ -4,6 +4,7 @@ import cn.hutool.core.codec.binary.Base64; import cn.hutool.core.codec.HexUtil; import cn.hutool.core.lang.Validator; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm; import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.digest.DigestAlgorithm; @@ -298,7 +299,7 @@ public class SecureUtil { * @since 3.3.0 */ public static HMac hmac(final HmacAlgorithm algorithm, final String key) { - return new HMac(algorithm, StrUtil.utf8Bytes(key)); + return new HMac(algorithm, ByteUtil.toUtf8Bytes(key)); } /** @@ -336,7 +337,7 @@ public class SecureUtil { * @since 3.3.0 */ public static HMac hmacMd5(final String key) { - return hmacMd5(StrUtil.utf8Bytes(key)); + return hmacMd5(ByteUtil.toUtf8Bytes(key)); } /** @@ -375,7 +376,7 @@ public class SecureUtil { * @since 3.3.0 */ public static HMac hmacSha1(final String key) { - return hmacSha1(StrUtil.utf8Bytes(key)); + return hmacSha1(ByteUtil.toUtf8Bytes(key)); } /** @@ -414,7 +415,7 @@ public class SecureUtil { * @since 5.6.0 */ public static HMac hmacSha256(final String key) { - return hmacSha256(StrUtil.utf8Bytes(key)); + return hmacSha256(ByteUtil.toUtf8Bytes(key)); } /** diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricEncryptor.java b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricEncryptor.java index cfbdaa914..37cfd81de 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricEncryptor.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricEncryptor.java @@ -1,10 +1,10 @@ package cn.hutool.crypto.asymmetric; -import cn.hutool.core.codec.binary.Base64; import cn.hutool.core.codec.HexUtil; +import cn.hutool.core.codec.binary.Base64; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import java.io.InputStream; import java.nio.charset.Charset; @@ -63,7 +63,7 @@ public interface AsymmetricEncryptor { * @return 加密后的bytes */ default byte[] encrypt(final String data, final Charset charset, final KeyType keyType) { - return encrypt(StrUtil.bytes(data, charset), keyType); + return encrypt(ByteUtil.toBytes(data, charset), keyType); } /** @@ -74,7 +74,7 @@ public interface AsymmetricEncryptor { * @return 加密后的bytes */ default byte[] encrypt(final String data, final KeyType keyType) { - return encrypt(StrUtil.utf8Bytes(data), keyType); + return encrypt(ByteUtil.toUtf8Bytes(data), keyType); } /** diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/Sign.java b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/Sign.java index 42d8161a0..450f9033a 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/Sign.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/Sign.java @@ -1,11 +1,11 @@ package cn.hutool.crypto.asymmetric; +import cn.hutool.core.codec.HexUtil; import cn.hutool.core.codec.binary.Base64; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.codec.HexUtil; -import cn.hutool.core.text.StrUtil; import cn.hutool.crypto.CryptoException; import cn.hutool.crypto.KeyUtil; import cn.hutool.crypto.SecureUtil; @@ -14,11 +14,7 @@ import cn.hutool.crypto.SignUtil; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.Charset; -import java.security.InvalidAlgorithmParameterException; -import java.security.KeyPair; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.Signature; +import java.security.*; import java.security.cert.Certificate; import java.security.cert.X509Certificate; import java.security.spec.AlgorithmParameterSpec; @@ -198,7 +194,7 @@ public class Sign extends BaseAsymmetric { * @since 5.7.0 */ public byte[] sign(final String data, final Charset charset) { - return sign(StrUtil.bytes(data, charset)); + return sign(ByteUtil.toBytes(data, charset)); } /** diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/Digester.java b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/Digester.java index 046087077..a3c30033c 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/Digester.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/Digester.java @@ -1,12 +1,12 @@ package cn.hutool.crypto.digest; -import cn.hutool.core.io.file.FileUtil; +import cn.hutool.core.codec.HexUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.codec.HexUtil; -import cn.hutool.core.text.StrUtil; import cn.hutool.crypto.CryptoException; import cn.hutool.crypto.SecureUtil; @@ -169,7 +169,7 @@ public class Digester implements Serializable { * @since 4.6.0 */ public byte[] digest(final String data, final Charset charset) { - return digest(StrUtil.bytes(data, charset)); + return digest(ByteUtil.toBytes(data, charset)); } /** diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/Mac.java b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/Mac.java index c2dd56498..6ec7049b0 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/Mac.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/Mac.java @@ -1,11 +1,11 @@ package cn.hutool.crypto.digest.mac; -import cn.hutool.core.codec.binary.Base64; -import cn.hutool.core.io.file.FileUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.codec.HexUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.codec.binary.Base64; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.io.file.FileUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.crypto.CryptoException; import java.io.ByteArrayInputStream; @@ -59,7 +59,7 @@ public class Mac implements Serializable { * @return 摘要 */ public byte[] digest(final String data, final Charset charset) { - return digest(StrUtil.bytes(data, charset)); + return digest(ByteUtil.toBytes(data, charset)); } /** diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/RC4.java b/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/RC4.java index 41be5aed3..4ca7c076b 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/RC4.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/RC4.java @@ -1,9 +1,10 @@ package cn.hutool.crypto.symmetric; -import cn.hutool.core.codec.binary.Base64; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.codec.HexUtil; +import cn.hutool.core.codec.binary.Base64; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.crypto.CryptoException; import cn.hutool.crypto.SecureUtil; @@ -51,7 +52,7 @@ public class RC4 implements Serializable { * @throws CryptoException key长度小于5或者大于255抛出此异常 */ public byte[] encrypt(final String message, final Charset charset) throws CryptoException { - return crypt(StrUtil.bytes(message, charset)); + return crypt(ByteUtil.toBytes(message, charset)); } /** @@ -224,7 +225,7 @@ public class RC4 implements Serializable { final WriteLock writeLock = this.lock.writeLock(); writeLock.lock(); try { - this.sbox = initSBox(StrUtil.utf8Bytes(key)); + this.sbox = initSBox(ByteUtil.toUtf8Bytes(key)); } finally { writeLock.unlock(); } diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/SymmetricEncryptor.java b/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/SymmetricEncryptor.java index fabe9e3ce..6f9540acf 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/SymmetricEncryptor.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/SymmetricEncryptor.java @@ -1,11 +1,11 @@ package cn.hutool.crypto.symmetric; +import cn.hutool.core.codec.HexUtil; import cn.hutool.core.codec.binary.Base64; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.codec.HexUtil; -import cn.hutool.core.text.StrUtil; import java.io.InputStream; import java.io.OutputStream; @@ -70,7 +70,7 @@ public interface SymmetricEncryptor { * @return 加密后的bytes */ default byte[] encrypt(final String data, final Charset charset) { - return encrypt(StrUtil.bytes(data, charset)); + return encrypt(ByteUtil.toBytes(data, charset)); } /** @@ -103,7 +103,7 @@ public interface SymmetricEncryptor { * @return 加密后的bytes */ default byte[] encrypt(final String data) { - return encrypt(StrUtil.bytes(data, CharsetUtil.UTF_8)); + return encrypt(ByteUtil.toBytes(data, CharsetUtil.UTF_8)); } /** diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/OpensslKeyUtilTest.java b/hutool-crypto/src/test/java/cn/hutool/crypto/OpensslKeyUtilTest.java index 164f008d8..12a1f815f 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/OpensslKeyUtilTest.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/OpensslKeyUtilTest.java @@ -1,7 +1,7 @@ package cn.hutool.crypto; import cn.hutool.core.io.resource.ResourceUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.crypto.asymmetric.SM2; import org.junit.Assert; import org.junit.Test; @@ -47,8 +47,8 @@ public class OpensslKeyUtilTest { genSm2.usePlainEncoding(); final String content = "我是Hanley."; - final byte[] sign = genSm2.sign(StrUtil.utf8Bytes(content)); - final boolean verify = genSm2.verify(StrUtil.utf8Bytes(content), sign); + final byte[] sign = genSm2.sign(ByteUtil.toUtf8Bytes(content)); + final boolean verify = genSm2.verify(ByteUtil.toUtf8Bytes(content), sign); Assert.assertTrue(verify); } } diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/PemUtilTest.java b/hutool-crypto/src/test/java/cn/hutool/crypto/PemUtilTest.java index e1e642300..2fc820c8e 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/PemUtilTest.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/PemUtilTest.java @@ -2,7 +2,7 @@ package cn.hutool.crypto; import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.asymmetric.SM2; @@ -86,8 +86,8 @@ public class PemUtilTest { sm2.usePlainEncoding(); final String content = "我是Hanley."; - final byte[] sign = sm2.sign(StrUtil.utf8Bytes(content)); - final boolean verify = sm2.verify(StrUtil.utf8Bytes(content), sign); + final byte[] sign = sm2.sign(ByteUtil.toUtf8Bytes(content)); + final boolean verify = sm2.verify(ByteUtil.toUtf8Bytes(content), sign); Assert.assertTrue(verify); } } diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/RSATest.java b/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/RSATest.java index 98614a4cc..e5e9bafdb 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/RSATest.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/RSATest.java @@ -1,11 +1,12 @@ package cn.hutool.crypto.asymmetric; -import cn.hutool.core.codec.binary.Base64; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.codec.HexUtil; -import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.codec.binary.Base64; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.crypto.KeyUtil; import cn.hutool.crypto.SecureUtil; import org.junit.Assert; @@ -39,12 +40,12 @@ public class RSATest { final RSA rsa = SecureUtil.rsa(privateKey, publicKey); // 公钥加密,私钥解密 - final byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); + final byte[] encrypt = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); final byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8)); // 私钥加密,公钥解密 - final byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); + final byte[] encrypt2 = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); final byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.UTF_8)); } @@ -60,13 +61,13 @@ public class RSATest { Assert.assertNotNull(rsa.getPrivateKeyBase64()); // 公钥加密,私钥解密 - final byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); + final byte[] encrypt = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); final byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8)); // 私钥加密,公钥解密 - final byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); + final byte[] encrypt2 = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); final byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.UTF_8)); } @@ -82,13 +83,13 @@ public class RSATest { Assert.assertNotNull(rsa.getPrivateKeyBase64()); // 公钥加密,私钥解密 - final byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); + final byte[] encrypt = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); final byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8)); // 私钥加密,公钥解密 - final byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); + final byte[] encrypt2 = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); final byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.UTF_8)); } @@ -104,13 +105,13 @@ public class RSATest { Assert.assertNotNull(rsa.getPrivateKeyBase64()); // 公钥加密,私钥解密 - final byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); + final byte[] encrypt = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); final byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8)); // 私钥加密,公钥解密 - final byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); + final byte[] encrypt2 = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); final byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.UTF_8)); } @@ -127,12 +128,12 @@ public class RSATest { Assert.assertNotNull(rsa.getPrivateKeyBase64()); // 公钥加密,私钥解密 - final byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); + final byte[] encrypt = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); final byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8)); // 私钥加密,公钥解密 - final byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); + final byte[] encrypt2 = rsa.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PrivateKey); final byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.UTF_8)); } diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/SM2Test.java b/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/SM2Test.java index bbbb2ae03..b6adccfe2 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/SM2Test.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/SM2Test.java @@ -1,9 +1,10 @@ package cn.hutool.crypto.asymmetric; -import cn.hutool.core.codec.binary.Base64; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.codec.HexUtil; +import cn.hutool.core.codec.binary.Base64; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.crypto.ECKeyUtil; import cn.hutool.crypto.KeyUtil; import cn.hutool.crypto.SecureUtil; @@ -54,7 +55,7 @@ public class SM2Test { sm2.setMode(SM2Engine.Mode.C1C2C3); // 公钥加密,私钥解密 - final byte[] encrypt = sm2.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); + final byte[] encrypt = sm2.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); final byte[] decrypt = sm2.decrypt(encrypt, KeyType.PrivateKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8)); } @@ -70,7 +71,7 @@ public class SM2Test { Assert.assertNotNull(sm2.getPrivateKeyBase64()); // 公钥加密,私钥解密 - final byte[] encrypt = sm2.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); + final byte[] encrypt = sm2.encrypt(ByteUtil.toBytes("我是一段测试aaaa", CharsetUtil.UTF_8), KeyType.PublicKey); final byte[] decrypt = sm2.decrypt(encrypt, KeyType.PrivateKey); Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8)); } @@ -137,8 +138,8 @@ public class SM2Test { final SM2 sm2 = SmUtil.sm2(); - final byte[] sign = sm2.sign(StrUtil.utf8Bytes(content)); - final boolean verify = sm2.verify(StrUtil.utf8Bytes(content), sign); + final byte[] sign = sm2.sign(ByteUtil.toUtf8Bytes(content)); + final boolean verify = sm2.verify(ByteUtil.toUtf8Bytes(content), sign); Assert.assertTrue(verify); } diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/SignTest.java b/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/SignTest.java index 531070edb..b90e72f47 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/SignTest.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/SignTest.java @@ -1,7 +1,7 @@ package cn.hutool.crypto.asymmetric; import cn.hutool.core.map.MapUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.crypto.SignUtil; import org.junit.Assert; import org.junit.Test; @@ -61,7 +61,7 @@ public class SignTest { * @param signAlgorithm 算法 */ private void signAndVerify(final SignAlgorithm signAlgorithm) { - final byte[] data = StrUtil.utf8Bytes("我是一段测试ab"); + final byte[] data = ByteUtil.toUtf8Bytes("我是一段测试ab"); final Sign sign = SignUtil.sign(signAlgorithm); // 签名 @@ -78,7 +78,7 @@ public class SignTest { @Test public void signAndVerifyTest2() { final String str = "wx2421b1c4370ec43b 支付测试 JSAPI支付测试 10000100 1add1a30ac87aa2db72f57a2375d8fec http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 1415659990 14.23.150.211 1 JSAPI 0CB01533B8C1EF103065174F50BCA001"; - final byte[] data = StrUtil.utf8Bytes(str); + final byte[] data = ByteUtil.toUtf8Bytes(str); final Sign sign = SignUtil.sign(SignAlgorithm.MD5withRSA); // 签名 @@ -109,7 +109,7 @@ public class SignTest { @Test public void signAndVerifyPSSTest() { final String str = "wx2421b1c4370ec43b 支付测试 JSAPI支付测试 10000100 1add1a30ac87aa2db72f57a2375d8fec http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 1415659990 14.23.150.211 1 JSAPI 0CB01533B8C1EF103065174F50BCA001"; - final byte[] data = StrUtil.utf8Bytes(str); + final byte[] data = ByteUtil.toUtf8Bytes(str); final Sign sign = SignUtil.sign(SignAlgorithm.SHA256withRSA_PSS); // 签名 diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/symmetric/DesTest.java b/hutool-crypto/src/test/java/cn/hutool/crypto/symmetric/DesTest.java index 8c1b4f5e5..6657b274b 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/symmetric/DesTest.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/symmetric/DesTest.java @@ -1,6 +1,7 @@ package cn.hutool.crypto.symmetric; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.crypto.KeyUtil; import cn.hutool.crypto.Mode; import cn.hutool.crypto.Padding; @@ -83,8 +84,8 @@ public class DesTest { final DES des = new DES( Mode.CTS, Padding.PKCS5Padding, - StrUtil.bytes("12345678"), - StrUtil.bytes("11223344") + ByteUtil.toUtf8Bytes("12345678"), + ByteUtil.toUtf8Bytes("11223344") ); final String encryptHex = des.encryptHex(content); diff --git a/hutool-extra/src/main/java/cn/hutool/extra/ssh/JschUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/ssh/JschUtil.java index 3cd8631f6..8121b371c 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/ssh/JschUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/ssh/JschUtil.java @@ -4,8 +4,9 @@ import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.net.LocalPortGenerator; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import com.jcraft.jsch.*; import java.io.IOException; @@ -463,7 +464,7 @@ public class JschUtil { charset = CharsetUtil.UTF_8; } final ChannelExec channel = (ChannelExec) createChannel(session, ChannelType.EXEC); - channel.setCommand(StrUtil.bytes(cmd, charset)); + channel.setCommand(ByteUtil.toBytes(cmd, charset)); channel.setInputStream(null); channel.setErrStream(errStream); InputStream in = null; @@ -503,7 +504,7 @@ public class JschUtil { out = shell.getOutputStream(); in = shell.getInputStream(); - out.write(StrUtil.bytes(cmd, charset)); + out.write(ByteUtil.toBytes(cmd, charset)); out.flush(); return IoUtil.read(in, charset); diff --git a/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java index dbee6ef61..61451d12b 100755 --- a/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java @@ -1,6 +1,6 @@ package cn.hutool.extra.servlet; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import org.junit.Ignore; import org.junit.Test; @@ -21,7 +21,7 @@ public class ServletUtilTest { @Ignore public void writeTest() { final HttpServletResponse response = null; - final byte[] bytes = StrUtil.utf8Bytes("地球是我们共同的家园,需要大家珍惜."); + final byte[] bytes = ByteUtil.toUtf8Bytes("地球是我们共同的家园,需要大家珍惜."); //下载文件 // 这里没法直接测试,直接写到这里,方便调用; @@ -38,7 +38,7 @@ public class ServletUtilTest { @Ignore public void jakartaWriteTest() { final jakarta.servlet.http.HttpServletResponse response = null; - final byte[] bytes = StrUtil.utf8Bytes("地球是我们共同的家园,需要大家珍惜."); + final byte[] bytes = ByteUtil.toUtf8Bytes("地球是我们共同的家园,需要大家珍惜."); //下载文件 // 这里没法直接测试,直接写到这里,方便调用; diff --git a/hutool-http/src/main/java/cn/hutool/http/client/body/UrlEncodedFormBody.java b/hutool-http/src/main/java/cn/hutool/http/client/body/UrlEncodedFormBody.java index d18b7fd44..c67c3d59d 100644 --- a/hutool-http/src/main/java/cn/hutool/http/client/body/UrlEncodedFormBody.java +++ b/hutool-http/src/main/java/cn/hutool/http/client/body/UrlEncodedFormBody.java @@ -2,7 +2,7 @@ package cn.hutool.http.client.body; import cn.hutool.core.io.IoUtil; import cn.hutool.core.net.url.UrlQuery; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.http.meta.ContentType; import java.io.OutputStream; @@ -40,7 +40,7 @@ public class UrlEncodedFormBody extends FormBody { @Override public void write(final OutputStream out) { - final byte[] bytes = StrUtil.bytes(UrlQuery.of(form, true).build(charset), charset); + final byte[] bytes = ByteUtil.toBytes(UrlQuery.of(form, true).build(charset), charset); IoUtil.write(out, false, bytes); } diff --git a/hutool-http/src/main/java/cn/hutool/http/server/HttpServerResponse.java b/hutool-http/src/main/java/cn/hutool/http/server/HttpServerResponse.java index aad4635d9..07d69cc9e 100644 --- a/hutool-http/src/main/java/cn/hutool/http/server/HttpServerResponse.java +++ b/hutool-http/src/main/java/cn/hutool/http/server/HttpServerResponse.java @@ -1,10 +1,11 @@ package cn.hutool.http.server; -import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.net.url.URLEncoder; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.http.meta.ContentType; import cn.hutool.http.meta.Header; @@ -12,14 +13,7 @@ import cn.hutool.http.meta.HttpStatus; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; +import java.io.*; import java.nio.charset.Charset; import java.util.List; import java.util.Map; @@ -27,6 +21,7 @@ import java.util.Map; /** * Http响应对象,用于写出数据到客户端 */ +@SuppressWarnings("resource") public class HttpServerResponse extends HttpServerBase { private Charset charset; @@ -278,7 +273,7 @@ public class HttpServerResponse extends HttpServerBase { */ public HttpServerResponse write(final String data) { final Charset charset = ObjUtil.defaultIfNull(this.charset, DEFAULT_CHARSET); - return write(StrUtil.bytes(data, charset)); + return write(ByteUtil.toBytes(data, charset)); } /** diff --git a/hutool-json/src/main/java/cn/hutool/json/jwt/signers/AsymmetricJWTSigner.java b/hutool-json/src/main/java/cn/hutool/json/jwt/signers/AsymmetricJWTSigner.java index c59f1c668..4a3478c17 100755 --- a/hutool-json/src/main/java/cn/hutool/json/jwt/signers/AsymmetricJWTSigner.java +++ b/hutool-json/src/main/java/cn/hutool/json/jwt/signers/AsymmetricJWTSigner.java @@ -1,8 +1,9 @@ package cn.hutool.json.jwt.signers; import cn.hutool.core.codec.binary.Base64; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.crypto.asymmetric.Sign; import java.nio.charset.Charset; @@ -63,7 +64,7 @@ public class AsymmetricJWTSigner implements JWTSigner { @Override public boolean verify(final String headerBase64, final String payloadBase64, final String signBase64) { return sign.verify( - StrUtil.bytes(StrUtil.format("{}.{}", headerBase64, payloadBase64), charset), + ByteUtil.toBytes(StrUtil.format("{}.{}", headerBase64, payloadBase64), charset), Base64.decode(signBase64)); } diff --git a/hutool-json/src/main/java/cn/hutool/json/jwt/signers/HMacJWTSigner.java b/hutool-json/src/main/java/cn/hutool/json/jwt/signers/HMacJWTSigner.java index b5879e5e8..0ea2777c3 100755 --- a/hutool-json/src/main/java/cn/hutool/json/jwt/signers/HMacJWTSigner.java +++ b/hutool-json/src/main/java/cn/hutool/json/jwt/signers/HMacJWTSigner.java @@ -1,7 +1,8 @@ package cn.hutool.json.jwt.signers; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.crypto.digest.HMac; import java.nio.charset.Charset; @@ -58,8 +59,8 @@ public class HMacJWTSigner implements JWTSigner { public boolean verify(final String headerBase64, final String payloadBase64, final String signBase64) { final String sign = sign(headerBase64, payloadBase64); return hMac.verify( - StrUtil.bytes(sign, charset), - StrUtil.bytes(signBase64, charset)); + ByteUtil.toBytes(sign, charset), + ByteUtil.toBytes(signBase64, charset)); } @Override diff --git a/hutool-json/src/test/java/cn/hutool/json/jwt/JWTTest.java b/hutool-json/src/test/java/cn/hutool/json/jwt/JWTTest.java index 6028bdd72..e45c0040a 100755 --- a/hutool-json/src/test/java/cn/hutool/json/jwt/JWTTest.java +++ b/hutool-json/src/test/java/cn/hutool/json/jwt/JWTTest.java @@ -2,7 +2,7 @@ package cn.hutool.json.jwt; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ByteUtil; import cn.hutool.json.jwt.signers.AlgorithmUtil; import cn.hutool.json.jwt.signers.JWTSigner; import cn.hutool.json.jwt.signers.JWTSignerUtil; @@ -10,12 +10,7 @@ import lombok.Data; import org.junit.Assert; import org.junit.Test; -import java.util.Arrays; -import java.util.Base64; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class JWTTest { @@ -96,7 +91,7 @@ public class JWTTest { "eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE2MjQwMDQ4MjIsInVzZXJJZCI6MSwiYXV0aG9yaXRpZXMiOlsiUk9MRV_op5LoibLkuozlj7ciLCJzeXNfbWVudV8xIiwiUk9MRV_op5LoibLkuIDlj7ciLCJzeXNfbWVudV8yIl0sImp0aSI6ImQ0YzVlYjgwLTA5ZTctNGU0ZC1hZTg3LTVkNGI5M2FhNmFiNiIsImNsaWVudF9pZCI6ImhhbmR5LXNob3AifQ." + "aixF1eKlAKS_k3ynFnStE7-IRGiD5YaqznvK2xEjBew"; - final boolean verify = JWT.of(token).setKey(StrUtil.utf8Bytes("123456")).verify(); + final boolean verify = JWT.of(token).setKey(ByteUtil.toUtf8Bytes("123456")).verify(); Assert.assertTrue(verify); } diff --git a/hutool-socket/src/test/java/cn/hutool/socket/aio/AioServerTest.java b/hutool-socket/src/test/java/cn/hutool/socket/aio/AioServerTest.java index ec8143c39..80a95baa2 100755 --- a/hutool-socket/src/test/java/cn/hutool/socket/aio/AioServerTest.java +++ b/hutool-socket/src/test/java/cn/hutool/socket/aio/AioServerTest.java @@ -18,7 +18,7 @@ public class AioServerTest { @Override public void accept(final AioSession session) { StaticLog.debug("【客户端】:{} 连接。", session.getRemoteAddress()); - session.write(BufferUtil.createUtf8("=== Welcome to Hutool socket server. ===")); + session.write(BufferUtil.ofUtf8("=== Welcome to Hutool socket server. ===")); } @Override @@ -32,7 +32,7 @@ public class AioServerTest { .append("Content-Type: text/html; charset=UTF-8\r\n")// .append("\r\n") .append("Hello Hutool socket");// - session.writeAndClose(BufferUtil.createUtf8(response)); + session.writeAndClose(BufferUtil.ofUtf8(response)); }else { session.read(); } diff --git a/hutool-socket/src/test/java/cn/hutool/socket/nio/NioClientTest.java b/hutool-socket/src/test/java/cn/hutool/socket/nio/NioClientTest.java index 3fbce8273..6a0f25a0d 100755 --- a/hutool-socket/src/test/java/cn/hutool/socket/nio/NioClientTest.java +++ b/hutool-socket/src/test/java/cn/hutool/socket/nio/NioClientTest.java @@ -34,8 +34,8 @@ public class NioClientTest { }); client.listen(); - client.write(BufferUtil.createUtf8("你好。\n")); - client.write(BufferUtil.createUtf8("你好2。")); + client.write(BufferUtil.ofUtf8("你好。\n")); + client.write(BufferUtil.ofUtf8("你好2。")); // 在控制台向服务器端发送数据 Console.log("请输入发送的消息:"); @@ -43,7 +43,7 @@ public class NioClientTest { while (scanner.hasNextLine()) { final String request = scanner.nextLine(); if (request != null && request.trim().length() > 0) { - client.write(BufferUtil.createUtf8(request)); + client.write(BufferUtil.ofUtf8(request)); } } } diff --git a/hutool-socket/src/test/java/cn/hutool/socket/nio/NioServerTest.java b/hutool-socket/src/test/java/cn/hutool/socket/nio/NioServerTest.java index d523e599d..6703d6119 100755 --- a/hutool-socket/src/test/java/cn/hutool/socket/nio/NioServerTest.java +++ b/hutool-socket/src/test/java/cn/hutool/socket/nio/NioServerTest.java @@ -45,6 +45,6 @@ public class NioServerTest { public static void doWrite(final SocketChannel channel, String response) throws IOException { response = "收到消息:" + response; //将缓冲数据写入渠道,返回给客户端 - channel.write(BufferUtil.createUtf8(response)); + channel.write(BufferUtil.ofUtf8(response)); } }