فهرست منبع

Merge pull request 'fix: 增大小文本文件检测字符编码的正确率;处理并发隐患' (#3) from asiawu/kkFileView:master into master

gitchenjh 1 سال پیش
والد
کامیت
3cfc51a4d7

+ 5 - 2
server/src/main/java/cn/keking/utils/EncodingDetects.java

@@ -16,8 +16,8 @@ import java.nio.file.Files;
  * @description: 自动获取文件的编码
  */
 public class EncodingDetects {
-    private static UniversalDetector detector = new UniversalDetector(null);
     private static final int DEFAULT_LENGTH = 4096;
+    private static final int LIMIT = 50;
     private static final Logger logger = LoggerFactory.getLogger(EncodingDetects.class);
 
     public static String getJavaEncode(String filePath) {
@@ -36,7 +36,10 @@ public class EncodingDetects {
     }
 
     public static String getJavaEncode(byte[] content) {
-        detector.reset();
+        if (content != null && content.length <= LIMIT) {
+            return SimpleEncodingDetects.getJavaEncode(content);
+        }
+        UniversalDetector detector = new UniversalDetector(null);
         detector.handleData(content, 0, content.length);
         detector.dataEnd();
         String charsetName = detector.getDetectedCharset();

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 4604 - 0
server/src/main/java/cn/keking/utils/SimpleEncodingDetects.java


+ 1 - 1
server/src/test/java/cn/keking/EncodingTests.java

@@ -17,7 +17,7 @@ import java.net.URISyntaxException;
 public class EncodingTests {
     @Test
     void testCharDet() throws URISyntaxException {
-        for (int i = 0; i < 28; i++) {
+        for (int i = 0; i < 29; i++) {
             File dir = new File(getClass().getClassLoader().getResource("testData\\" + i).toURI());
             String dirPath = dir.getPath();
             String textFileName = dir.list()[0];

+ 3 - 0
server/src/test/resources/testData/28/Small GB2312

@@ -0,0 +1,3 @@
+发斯蒂芬斯蒂芬
+
+顶顶顶顶~