簡體   English   中英

如何解壓縮字節數組中的壓縮數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM