我有一个压缩的字节数组[]数据,我不知道在压缩过程中使用的压缩技术。当我尝试解压缩它时,它给我像“不正确的标头检查”之类的错误。为了解决这个问题,我在字节数组之前添加了78 9c(平均120,-100)。在此之后添加了实际字节数据,现在它给了我不正确的数据检查。它在inflator.inflate()方法处中断了。 我用一些硬编码的字节测试了decompress方法。对于某些字节,它给了我完美的字符串。但是对于某些给我的错误,有人可以帮助我解决这个问题吗?
byte[] missingBytes={9,0,4,5,2,64,-48,68,21,6,65,-48,-124,37,10,66,-4}
这是我原来的字节数组。
在将其发送到我使用过的解压缩方法之前
byte[] missingBytes={120,-100,9,0,4,5,2,64,-48,68,21,6,65,-48,-124,37,10,66,-4}
这是减压代码
public String decompressToString(byte[] bytesToDecompress)
{
byte[] bytesDecompressed = this.decompress(bytesToDecompress);
String returnValue = null;
try{
returnValue = new String(bytesDecompressed,0,bytesDecompressed.length,"UTF-8");
}
catch (UnsupportedEncodingException uee){
uee.printStackTrace();
}
return returnValue;
}
public byte[] decompress(byte[] bytesToDecompress)
{
byte[] returnValues = null;
Inflater inflater = new Inflater();
int numberOfBytesToDecompress = bytesToDecompress.length;
inflater.setInput(bytesToDecompress,0,numberOfBytesToDecompress);
int bufferSizeInBytes = numberOfBytesToDecompress;
int numberOfBytesDecompressedSoFar = 0;
List<Byte> bytesDecompressedSoFar = new ArrayList<Byte>();
try
{
while (inflater.needsInput() == false)
{
byte[] bytesDecompressedBuffer = new byte[bufferSizeInBytes];
int numberOfBytesDecompressedThisTime = inflater.inflate(bytesDecompressedBuffer);
numberOfBytesDecompressedSoFar += numberOfBytesDecompressedThisTime;
for (int b = 0; b < numberOfBytesDecompressedThisTime; b++)
{
bytesDecompressedSoFar.add(bytesDecompressedBuffer[b]);
}
}
returnValues = new byte[bytesDecompressedSoFar.size()];
for (int b = 0; b < returnValues.length; b++)
{
returnValues[b] = (byte)(bytesDecompressedSoFar.get(b));
}
}
catch (DataFormatException dfe)
{
dfe.printStackTrace();
}
inflater.end();
return returnValues;
}