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語句。 –