[英]How to decompress a gzipped data in a byte array?
我有一個類,它有一個接收對象作為參數的方法。 此方法通過 RMI 調用。
public RMIClass extends Serializable {
public RMIMethod(MyFile file){
// do stuff
}
}
MyFile 有一個名為“body”的屬性,它是一個字節數組。
public final class MyFile implements Serializable {
private byte[] body = new byte[0];
//....
public byte[] getBody() {
return body;
}
//....
}
此屬性保存由另一個應用程序解析的文件的 gzip 壓縮數據。
在使用它執行進一步操作之前,我需要解壓縮這個字節數組。
我看到的所有解壓縮 gzip 數據的示例都假設我想將其寫入磁盤並創建一個物理文件,但我沒有這樣做。
我該怎么做呢?
提前致謝。
使用ByteArrayInputStream包裝字節數組並將其提供給GZipInputStream
查看這些示例,無論他們在哪里使用FileOutputStream,都要使用ByteArrayOutputStream。 無論他們在哪里使用FileInputStream,都要使用ByteArrayInputStream。 其余的應該很簡單。
為什么不創建自己的擴展OutputStream的類,或者編寫的存檔是什么?
如果要寫入ByteBuffer,可以執行此操作。
private static void uncompress(final byte[] input, final ByteBuffer output) throws IOException
{
final GZIPInputStream inputGzipStream = new GZIPInputStream(new ByteArrayInputStream(input));
Channels.newChannel(inputGzipStream).read(output);
}
JDK 9+
private byte[] gzipUncompress(byte[] compressedBytes) throws IOException {
try (InputStream inputStream = new GZIPInputStream(new ByteArrayInputStream(compressedBytes))) {
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
inputStream.transferTo(outputStream);
return outputStream.toByteArray();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.