1
我试图用Deflater和InflaterOutputStream压缩和解压缩一些字节的数据。Java通货紧缩/通货膨胀流如何工作?
问题是,压缩似乎工作(我不是 肯定,因为压缩数据总是相同的,即使我有随机测试数据)。 但是,减压没有任何回报。
我在做什么错?
我的控制台输出:
测试数据:D8A8E00821608F227AE473774E177216
压缩数据:789C
解压数据:
我的程序:
SecureRandom random = new SecureRandom();
byte[] testdata = new byte[16];
random.nextBytes(testdata);
System.out.println("Test data: " + DatatypeConverter.printHexBinary(testdata));
byte[] compressed = null;
try (ByteArrayOutputStream buffer = new ByteArrayOutputStream())
{
try (DeflaterOutputStream stream = new DeflaterOutputStream(buffer))
{
stream.write(testdata);
stream.flush();
compressed = buffer.toByteArray();
System.out.println("Compressed data: " + DatatypeConverter.printHexBinary(compressed));
}
}
catch (IOException e)
{
System.out.println("IOException during compression.");
}
byte[] decompressed = null;
try (ByteArrayOutputStream buffer = new ByteArrayOutputStream())
{
try (InflaterOutputStream stream = new InflaterOutputStream(buffer))
{
stream.write(compressed);
stream.flush();
decompressed = buffer.toByteArray();
System.out.println("Decompressed data: " + DatatypeConverter.printHexBinary(decompressed));
}
}
catch (IOException e)
{
System.out.println("IOException during decompression.");
}
哇,谢谢:流,等到以后调用
toByteArray
。我对使用试用资源语句感到非常兴奋,我完全忘记了这一点。 –@JohnFrost:我没有注意到你正在使用它 - 所以根本不用打扰调用'close()',而是将你的'toByteArray'调用*放在内部'try'块之外。我编辑了我的答案来证明这一点。 –
天才,谢谢。我从未使用过新的try语句。 –