gpt4 book ai didi

java - 如何压缩小字符串

转载 作者:行者123 更新时间:2023-12-02 07:18:17 26 4
gpt4 key购买 nike

Possible Duplicate:
Best compression algorithm for short text strings

我需要压缩和解压缩字符串的帮助。

当我尝试压缩较小的字符串时,它会转换为比原始大小更多的字节。但是当我添加更大的字符串时,它会压缩为更小的字节。

我在下面给出我的代码:

package string_compress;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;



//@author Administrator

public class Main
{

public static String compress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
System.out.println("String length : " + str.length());
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes());

gzip.close();

String outStr = out.toString("ISO-8859-1");//ISO-8859-1
System.out.println("Output String lenght : " + outStr.length());

return outStr;
}

public static String decompress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
System.out.println("Input String length : " + str.length());
GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(str.getBytes("ISO-8859-1")));
BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "ISO-8859-1"));
String outStr = "";
String line;
while ((line=bf.readLine())!=null) {
outStr += line;
}
System.out.println("Output String lenght : " + outStr.length());
return outStr;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)throws IOException {


//String filePath = ".\response.txt";

// String string = getFileData(filePath);
String string= "rishi jain is tring to compress the string";

System.out.println("after compress:");
String compressed = Main.compress(string);
System.out.println(compressed);
System.out.println("after decompress:");
String decomp = decompress(compressed);
System.out.println(decomp);

}


}

最佳答案

不要压缩短字符串,因为 GZIP 仅在输入的特定大小以上才起作用,可能是 18 或更大,请参见下文。设置长度阈值,如果压缩版本比未压缩版本长,则丢弃压缩版本。

当你需要解压时,寻找GZIP header magic sequence , (0x1f, 0x8b) 位于字符串的开头。如果不存在,则该字符串不会被压缩,并且应“按原样”返回。

偶然从此魔术序列开始的字符串必须独立于其大小进行压缩(应该很少见,因为两个字节都不是可打印的 ASCII 符号)。

当然,魔术序列后的第一个字节指定了格式,并且有一个选项“存储”(未压缩)。然而,如果您有很多空字符串或非常短的字符串,这可能还不够好,因为 gzip 有 10 字节的 header 和 8 字节的页脚。

关于java - 如何压缩小字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com