From d0aff3e3cd03e630069ed1b0ed27a5776b9ebcc3 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 26 Aug 2021 11:58:02 +0800 Subject: [PATCH] add methods --- CHANGELOG.md | 1 + .../cn/hutool/core/io/CharsetDetector.java | 18 ++++++++-- .../java/cn/hutool/core/util/CharsetUtil.java | 33 ++++++++++++++++++- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5be1053e..28f65152c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ * 【core 】 添加NullComparator、FuncComparator(issue#I471X7@Gitee) * 【core 】 LambdaUtil添加getFieldName(issue#I4750U@Gitee) * 【cron 】 Scheduler增加setThreadExecutor(issue#I47A6N@Gitee) +* 【core 】 CharsetDetector增加detect重载,支持自定义缓存大小(issue#I478E5@Gitee) ### 🐞Bug修复 * 【core 】 修复MapUtil.sort比较器不一致返回原map的问题(issue#I46AQJ@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/CharsetDetector.java b/hutool-core/src/main/java/cn/hutool/core/io/CharsetDetector.java index d24e6f540..7c48c1be9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/CharsetDetector.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/CharsetDetector.java @@ -42,7 +42,7 @@ public class CharsetDetector { /** * 探测文件编码 * - * @param file 文件 + * @param file 文件 * @param charsets 需要测试用的编码,null或空使用默认的编码数组 * @return 编码 * @since 5.6.7 @@ -60,11 +60,25 @@ public class CharsetDetector { * @return 编码 */ public static Charset detect(InputStream in, Charset... charsets) { + return detect(IoUtil.DEFAULT_BUFFER_SIZE, in, charsets); + } + + /** + * 探测编码
+ * 注意:此方法会读取流的一部分,然后关闭流,如重复使用流,请使用使用支持reset方法的流 + * + * @param bufferSize 自定义缓存大小,即每次检查的长度 + * @param in 流,使用后关闭此流 + * @param charsets 需要测试用的编码,null或空使用默认的编码数组 + * @return 编码 + * @since 5.7.10 + */ + public static Charset detect(int bufferSize, InputStream in, Charset... charsets) { if (ArrayUtil.isEmpty(charsets)) { charsets = DEFAULT_CHARSETS; } - final byte[] buffer = new byte[512]; + final byte[] buffer = new byte[bufferSize]; try { while (in.read(buffer) > -1) { for (Charset charset : charsets) { diff --git a/hutool-core/src/main/java/cn/hutool/core/util/CharsetUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/CharsetUtil.java index 7bea2329a..b2fff1553 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/CharsetUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/CharsetUtil.java @@ -1,8 +1,10 @@ package cn.hutool.core.util; +import cn.hutool.core.io.CharsetDetector; import cn.hutool.core.io.FileUtil; import java.io.File; +import java.io.InputStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.charset.UnsupportedCharsetException; @@ -65,7 +67,7 @@ public class CharsetUtil { /** * 解析字符串编码为Charset对象,解析失败返回系统默认编码 * - * @param charsetName 字符集,为空则返回默认字符集 + * @param charsetName 字符集,为空则返回默认字符集 * @return Charset * @since 5.2.6 */ @@ -192,4 +194,33 @@ public class CharsetUtil { public static Charset defaultCharset() { return Charset.defaultCharset(); } + + /** + * 探测编码
+ * 注意:此方法会读取流的一部分,然后关闭流,如重复使用流,请使用使用支持reset方法的流 + * + * @param in 流,使用后关闭此流 + * @param charsets 需要测试用的编码,null或空使用默认的编码数组 + * @return 编码 + * @see CharsetDetector#detect(InputStream, Charset...) + * @since 5.7.10 + */ + public static Charset defaultCharset(InputStream in, Charset... charsets) { + return CharsetDetector.detect(in, charsets); + } + + /** + * 探测编码
+ * 注意:此方法会读取流的一部分,然后关闭流,如重复使用流,请使用使用支持reset方法的流 + * + * @param bufferSize 自定义缓存大小,即每次检查的长度 + * @param in 流,使用后关闭此流 + * @param charsets 需要测试用的编码,null或空使用默认的编码数组 + * @return 编码 + * @see CharsetDetector#detect(int, InputStream, Charset...) + * @since 5.7.10 + */ + public static Charset defaultCharset(int bufferSize, InputStream in, Charset... charsets) { + return CharsetDetector.detect(bufferSize, in, charsets); + } }