6

我有一个类,它有一个接收对象作为参数的方法。此方法通过 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 数据的示例都假设我想将其写入磁盘并创建一个物理文件,但我没有这样做。

我该怎么做呢?

提前致谢。

4

5 回答 5

10

ByteArrayInputStream包装字节数组并将其输入GZipInputStream

于 2008-11-06T21:10:47.817 回答
1

查看这些示例,无论它们在何处使用 FileOutputStream,都请改用 ByteArrayOutputStream。无论他们在哪里使用 FileInputStream,请改用 ByteArrayInputStream。其余的应该很简单。

于 2008-11-06T21:09:20.690 回答
0

为什么不创建自己的扩展OutputStream的类,或者归档写入的内容是什么?

于 2008-11-06T21:06:48.603 回答
0

If you want to write to a ByteBuffer you can do this.

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);
    }
于 2019-05-16T14:14:53.780 回答
0

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();
      }
    }

}

于 2022-01-17T22:27:54.933 回答