小编Eld*_*dad的帖子

Java按顺序解压GZIP流

我的 Java 程序实现了一个服务器,它应该从客户端通过 websockets 获取一个非常大的文件,使用 gzip 压缩,并且应该检查文件内容中的一些字节模式。

客户端发送嵌入在专有协议中的文件块,因此我从客户端收到一条又一条消息,解析消息并提取 gzipped 文件内容。

我无法在程序内存中保存整个文件,所以我试图解压缩每个块,处理数据并继续下一个块。

我正在使用以下代码:

public static String gzipDecompress(byte[] compressed) throws IOException {
    String uncompressed;
    try (
        ByteArrayInputStream bis = new ByteArrayInputStream(compressed);
        GZIPInputStream gis = new GZIPInputStream(bis);
        Reader reader = new InputStreamReader(gis);
        Writer writer = new StringWriter()
    ) {

      char[] buffer = new char[10240];
      for (int length = 0; (length = reader.read(buffer)) > 0; ) {
        writer.write(buffer, 0, length);
      }
      uncompressed = writer.toString();
    }

    return uncompressed;
  }
Run Code Online (Sandbox Code Playgroud)

但是在使用第一个压缩块调用函数时出现以下异常:

java.io.EOFException: Unexpected end of ZLIB …
Run Code Online (Sandbox Code Playgroud)

java gzip zlib chunks

3
推荐指数
1
解决办法
6688
查看次数

标签 统计

chunks ×1

gzip ×1

java ×1

zlib ×1