我已经创建了一个应用程序来压缩和解压字符串,使用充气器和平减器。当对简单word语句进行测试并将其压缩为长度小于原始字符串长度的字符串时,应用程序工作正常,但问题是,当我尝试使用加密字符串时,压缩字符串长度略大于原始字符串长度。
谁能告诉我这件事的解决办法吗?
private String compress(String stringToCompress) throws UnsupportedEncodingException
{
byte[] compressedData = new byte[1024];
byte[] stringAsBytes = stringToCompress.getBytes("UTF-8");
Deflater compressor = new Deflater();
compressor.setInput(stringAsBytes);
compressor.finish();
int compressedDataLength = compressor.deflate(compressedData);
byte[] bytes = Arrays.copyOf(compressedData, compressedDataLength);
return Base64.encodeBase64String(bytes);
}
private String decompressToString(String base64String) throws UnsupportedEncodingException, DataFormatException
{
byte[] compressedData = Base64.decodeBase64(base64String);
Inflater deCompressor = new Inflater();
deCompressor.setInput(compressedData, 0, compressedData.length);
byte[] output = new byte[102400];
int decompressedDataLength = deCompressor.inflate(output);
deCompressor.end();
return new String(output, 0, decompressedDataLength, "UTF-8");
}时
public static void main(String[] args)
{
Sample_class = new Sample_class();
S String strToBeCompressed = "Pehla nasha Pehla khumaar Naya pyaar hai nayaPehla nasha Pehla khumaar Naya pyaar hai nayaPehla nasha Pehla khumaar Naya pyaar hai nayaPehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kPehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin ";
System.out.println(strToBeCompressed);
String compressedData = m.compress(strToBeCompressed);
String deCompressedString = m.decompressToString(compressedData);
System.out.println("Original :: " + strToBeCompressed.length());
System.out.println("Compressed :: " + compressedData.toString().length());
System.out.println("decompressed :: " + deCompressedString.length());
}输出
Pehla nasha Pehla khumaar Naya pyaar hai nayaPehla nasha Pehla khumaar Naya pyaar hai nayaPehla nasha Pehla khumaar Naya pyaar hai nayaPehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kPehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin
Original :: 980
Compressed :: 212
decompressed :: 980但当
public static void main(String[] args)
{
Sample_class = new Sample_class();
String strToBeCompressed = "iVBORw0KGgoAAAANSUhEUgAAAMUAAADFCAIAAABrWqGnAACAAElEQVR42uy9aYxk2XXn14BswNIY8BiGP3lgD7x8GBvjD5IM2TOaMWRbguERaGOokTSSRqJIUWKTItkkm0uT3c1e2c2q6q6qrr0q933P2Pc94r14+77vW+yRa2VVZVZmVvq+yO5ik5LGGktiF4EJHDy8jIqqioj3e//zP/eee/M50zT39vbORo/Dw8Ojo6MnT56cfWKP07MTEMdhPDk+Ozt+Esbpydnp0dnx47OTk7MzEE9GcXb65Al48ePHZ6enZ6fHYTw8ONwaPGi17vv+tmGAGOg6iL5hgOgaVsc02qbiapzFkwaLOxwdSHxXUfqaZpKUSdM2L7YMs+P6vuu5tuNZZltS+5IyVDRwdEhabsAqjNgENTTAH8ktUeoqaltRXJ4H0ZYkE6qrlYJSKej1stGogKNLNPsyqzWrKlJ1WGxoSru+PrCkrs63TSlo2U7L1j0dhN1zBw+2Ds6ODs9OD8/OHoafGnyq8MOCD3p+WcDVOT09PTk5AcenV+oTvGTn//X5u3r99def29/fPz4+Pn8KnIBnP8n3d/7NnYzg+HGeRk+dhjw9OT0J3zxg6En4+vDk9Ozw6Pj+3kG3u+U5AKAQkVH0VBWwcs5TRzc7ug548jXeFzkQbVnoafKWroPwGc7nhZaktnSjY7kt23VNy5EVQEyHF3uiDHhq86JHswHL9yTFpRiDIAFh50h1ZPB/abuWZTchpZzn82m5nD9HykTqHonA8XUkHeFreYBUT+MHhrhlyTuB1Wm7Qdu1A8v0DICU0basjmf1/IPTx/dPjg6fnJzzBD7rSfix//IrehLeaM8GT0+ffQoTeHxi7++cj5MRIk9OR1/j6TlP58oEnj0Ob86TUJnCF5+dPT55fHBwvz8Y+C7AxZflQBA8juvJ8ognra/pfd0C0dFtgFRP17qafE7bQA6jL0gdlm/RHCBmoGiAjK5q9GynbZhArgA9HkW7JNXm+K4gdngBRF+SA4Z1";
System.out.println(strToBeCompressed);
String compressedData = m.compress(strToBeCompressed);
String deCompressedString = m.decompressToString(compressedData);
System.out.println("Original :: " + strToBeCompressed.length());
System.out.println("Compressed :: " + compressedData.toString().length());
System.out.println("decompressed :: " + deCompressedString.length());
}输出
iVBORw0KGgoAAAANSUhEUgAAAMUAAADFCAIAAABrWqGnAACAAElEQVR42uy9aYxk2XXn14BswNIY8BiGP3lgD7x8GBvjD5IM2TOaMWRbguERaGOokTSSRqJIUWKTItkkm0uT3c1e2c2q6q6qrr0q933P2Pc94r14+77vW+yRa2VVZVZmVvq+yO5ik5LGGktiF4EJHDy8jIqqioj3e//zP/eee/M50zT39vbORo/Dw8Ojo6MnT56cfWKP07MTEMdhPDk+Ozt+Esbpydnp0dnx47OTk7MzEE9GcXb65Al48ePHZ6enZ6fHYTw8ONwaPGi17vv+tmGAGOg6iL5hgOgaVsc02qbiapzFkwaLOxwdSHxXUfqaZpKUSdM2L7YMs+P6vuu5tuNZZltS+5IyVDRwdEhabsAqjNgENTTAH8ktUeoqaltRXJ4H0ZYkE6qrlYJSKej1stGogKNLNPsyqzWrKlJ1WGxoSru+PrCkrs63TSlo2U7L1j0dhN1zBw+2Ds6ODs9OD8/OHoafGnyq8MOCD3p+WcDVOT09PTk5AcenV+oTvGTn//X5u3r99def29/fPz4+Pn8KnIBnP8n3d/7NnYzg+HGeRk+dhjw9OT0J3zxg6En4+vDk9Ozw6Pj+3kG3u+U5AKAQkVH0VBWwcs5TRzc7ug548jXeFzkQbVnoafKWroPwGc7nhZaktnSjY7kt23VNy5EVQEyHF3uiDHhq86JHswHL9yTFpRiDIAFh50h1ZPB/abuWZTchpZzn82m5nD9HykTqHonA8XUkHeFreYBUT+MHhrhlyTuB1Wm7Qdu1A8v0DICU0basjmf1/IPTx/dPjg6fnJzzBD7rSfix//IrehLeaM8GT0+ffQoTeHxi7++cj5MRIk9OR1/j6TlP58oEnj0Ob86TUJnCF5+dPT55fHBwvz8Y+C7AxZflQBA8juvJ8ognra/pfd0C0dFtgFRP17qafE7bQA6jL0gdlm/RHCBmoGiAjK5q9GynbZhArgA9HkW7JNXm+K4gdngBRF+SA4Z1
Original :: 1032
Compressed :: 1076
decompressed :: 1032发布于 2014-01-04 11:07:48
数据压缩利用了数据中可以使用较短模式进行编码的模式。这是在假设模式存在的前提下工作的。如果没有发现模式,一个完美的压缩方案将使数据不受影响。不幸的是,大多数压缩方案至少会添加少量元数据来定义该方案。你看到的可能是这种情况。
想象一下试图压缩已经压缩的数据。当然,你不会期望这会进一步缩小它的大小。
发布于 2014-01-04 16:19:28
没有什么问题需要解决。
您提供的输入是Base-64编码的。这应该是可压缩的,实际上它是可压缩的。您应该会看到这1032个Bas-64个字符压缩到大约800个字节(compressedDataLength)。
但是,你又转过身来,通过Base-64对二进制压缩数据进行编码,然后回到您开始的地方,进行一些扩展。
基-64编码总是以4/3的倍数扩展数据,所以如果没有得到至少3/4的压缩因子,那么就会看到整体的扩展。
此外,即使没有Base-64编码,也会有通过压缩而扩展的数据,例如已经压缩的数据。对于某些输入,不可避免地会扩展无损压缩。
发布于 2014-01-04 10:46:01
好吧,你是base64编码的压缩字节。可以增加更多的东西。处理这些事情的最好方法是byte[]和snot字符串。转换为字节,将它们流到您想要的位置,然后从byte[]重新构造资源/字符串。
https://stackoverflow.com/questions/20919856
复制相似问题