Java 充气机压缩法
我有一个压缩文件 使用Java 充气机压缩法,java,Java,我有一个压缩文件 使用充气器类,我可以对其进行解压缩,但使用放气器再次压缩时,两个文件不完全相同 我已经尝试将压缩级别更改为最佳 public static String compress(byte[] rawData) { Deflater compressor = new Deflater(); byte[] byteBuffer = new byte[1024]; ByteArrayOutputStream outputStream = new ByteArray
充气器
类,我可以对其进行解压缩,但使用放气器
再次压缩时,两个文件不完全相同
我已经尝试将压缩级别更改为最佳
public static String compress(byte[] rawData)
{
Deflater compressor = new Deflater();
byte[] byteBuffer = new byte[1024];
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(
rawData.length);
compressor.setInput(rawData);
compressor.setLevel(Deflater.BEST_COMPRESSION);
compressor.finish();
while (!compressor.finished())
{
outputStream.write(byteBuffer, 0,
new Integer(compressor.deflate(byteBuffer)));
}
return new String(outputStream.toByteArray());
}
…结果更接近原始结果
这是我的充气机代码:
public static String decompress(byte[] compressed)
throws DataFormatException
{
Inflater decompressor = new Inflater();
byte[] byteBuffer = new byte[1024];
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(
compressed.length);
decompressor.setInput(compressed);
while (!decompressor.finished())
{
outputStream.write(byteBuffer, 0,
new Integer(decompressor.inflate((byteBuffer))));
}
return new String(outputStream.toByteArray());
}
如何确定最初使用了哪些选项来从解压缩的文件重建原始文件?我新压缩的文件不符合要求。我强烈怀疑您的问题是由以下行引起的:
return new String(outputStream.toByteArray());
String(byte[])
构造函数使用未指定的平台相关字符集将字节转换为字符,该字符集可能会任意损坏二进制数据,因为并非所有可能的字节都对应于有效字符。不能保证新字符串(someBytes).getBytes()等于someBytes
。你应该返回字节数组。出于好奇,你为什么需要这样做?@Boann:我得到了一个压缩文件,其中包含我想要修改和重建的脚本。没有提供详细信息@user3764804但为什么使用什么精确的压缩器设置才重要,只要它可以由任何兼容的解压器解压?您知道,某些压缩算法会根据外部因素(如CPU利用率或RAM使用率)改变其行为。此外,有些人做得比其他人好(通常是为了权衡上述因素之一)。真正重要的是,它可以被解压缩,并且满足所需的性能要求。@Dark Falcon:当我压缩它时,它不符合要求。但也可以复制相同的压缩。是的!:)转换到字符串混乱的事情,谢谢很多人!文件现在是相同的。