当前位置: 首页 > 知识库问答 >
问题:

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

范霄
2023-03-14

我正在向我的远程服务器发送多部分内容以将其存储在文件系统中。为此,我使用JavaTCP/IP协议。为了避免网络带宽和TCP输入/输出缓冲内存,我以压缩格式发送数据。但是,我无法解压缩从客户端收到的数据。我得到了ZLIB输入流的意外结束异常。这是因为服务器正在接收数据块

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个答案

昌学
2023-03-14

尝试添加:

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

你的客户代码。

邴和雅
2023-03-14

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

如果你真的想做一个基于流的数据搬迁,放下gzip,选择zlib,我相信Zlib压缩在Java中使用Deflate和Inflate类可以解决如何做到这一点。

 类似资料:
  • 本文向大家介绍Java实现文件压缩与解压的示例[zip格式,gzip格式],包括了Java实现文件压缩与解压的示例[zip格式,gzip格式]的使用技巧和注意事项,需要的朋友参考一下 Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例。 zip扮演着归档和压缩两个角色;gzip并不将文件归档,仅

  • 问题内容: 我想使用Gzip压缩来压缩java中的输入流。 假设我们有一个未压缩的输入流(1GB数据..)。因此,我需要从源压缩的输入流: 问题答案: DeflaterInputStream不是您想要的,因为它缺少gzip标头/预告片,并且使用略有不同的压缩方式。 如果从OutputStream(推)更改为InputStream(拉),则需要做不同的事情。 GzipOutputStream的作用是

  • 我想在JavaScript中做解压缩图像。我已经用C#使用gzip压缩了图像。如何在JavaScript中解压缩gzipped数据? C#代码

  • 问题内容: 我正在使用php的功能来执行HTTP请求。为了节省带宽,我决定使用添加标题。 显然,输出一个gzip编码的字符串,所以我用来解码该编码的字符串,但是将作为参数传递的数据出错。 我知道还有另一个功能可以解压缩压缩后的数据,但是它不包含在我的PHP版本中(也许仅在SVN上可用)。 我知道cUrl可以即时解码gzip流(没有任何问题),但是有人建议我使用它而不是cUrl。 您是否知道以其他方

  • 问题内容: 我正在尝试编写一个可以压缩数据的类。以下代码失败(不会引发异常,但目标.gz文件为空。) 此外:我不想像在所有示例中一样直接生成.gz文件。我只想获取压缩的数据,以便在将数据写入文件之前将其加密。 如果我直接写入文件,则一切正常: 但是,如果我想将其“旁路”到字节数组流,则不会产生单个字节- 始终为空。 问题答案: 问题是您没有关闭。在关闭它之前,输出将是不完整的。 您只需要 在 读取

  • 我想知道是否可以为服务器发送的事件(SSE;内容类型:文本/事件流)启用gzip压缩。 根据这本书,似乎有可能:http://chimera.labs.oreilly.com/books/1230000000545/ch16.html 但是我找不到任何带有gzip压缩的SSE示例。我尝试发送带有响应标头字段Content-Encode设置为“gzip”的gzip消息,但没有成功。 为了在SSE周围