TCP Socket以GZIP压缩格式发送数据

时间:2014-01-07 16:59:11

标签: java sockets tcp

我将MultiPart内容发送到我的远程服务器以将其存储在文件系统中。为此我使用Java TCP/IP协议。为避免网络带宽和TCP输入/输出缓冲存储器,我以GZIP压缩格式发送数据。但是,我无法解压缩从客户端收到的数据。我有 Unexpected end of ZLIB input stream 例外。由于服务器正在 chunks 中接收数据。

Java代码

客户

  OutputStream out = new GZIPOutputStream(sock.getOutputStream());
  byte[] dataToSend = FileUtil.readFile(new File("/Users/bharathi/Downloads/programming_in_go.pdf"));
  out.write(dataToSend);

服务器

    out = new FileOutputStream("/Users/bharathi/Documents/request_trace.log");
    InputStream in = new GZIPInputStream(clntSocket.getInputStream());
    int totalBytesRead = 0;
    int bytesRead;
    byte[] buffer = new byte[BUFFER_SIZE];

    while ((bytesRead = in.read(buffer)) != -1)
    {
        out.write(buffer , 0 , bytesRead);
        totalBytesRead += bytesRead;
    }

有没有解决方案在Socket中以GZIP压缩格式发送数据?

2 个答案:

答案 0 :(得分:3)

GZIPOutputStream生成一个GZIP file format,这意味着另一端必须先接收完整的流(这是一个文件)才能处理它,这就是你的错误的原因。

如果您希望实际进行基于流的数据传输,请删除gzip,然后转到zlib,我相信Zlib compression Using Deflate and Inflate classes in Java会回答如何执行此操作。

答案 1 :(得分:0)

尝试添加:

out.flush();
sock.shutdownOutput();

到您的客户端代码。