通过套接字发送压缩数据

时间:2010-06-16 00:08:16

标签: java sockets compression

我必须在java中创建一个日志服务器,一个任务是发送压缩的数据。现在我用纯文本逐行发送它,但我必须压缩它。 服务器处理“HTTP like”请求。例如,我可以获得发送“GET xxx.log”的日志。这将建立到服务器的TCP连接,带有标头和日志的服务器响应,并关闭连接。客户端逐行读取并分析每个LOG条目。 我尝试了一些没有成功的方法。 我的主要问题是我不知道每一行的结束位置(在客户端大小)。 有什么想法吗?

3 个答案:

答案 0 :(得分:3)

在服务器上使用GZIPOutputStream,在客户端使用GZIPInputStream,其周围有一个InputStreamReader,周围有一个BufferedReader。然后只读行。

答案 1 :(得分:1)

最有意义的是这样的事情

  1. 客户端发送GET foo.log
  2. 服务器发送“大小:15042 \ n”
  3. 服务器发送压缩日志文件,整个
  4. 客户端解析Size:标头(读取直到换行符),然后知道预期的字节数
  5. 然后,客户端从服务器读取所有这些字节(示例中为15042)
  6. 客户端解压缩收到的数据
  7. 客户端然后处理日志(解压缩,你会找到换行符)

答案 2 :(得分:0)

您可以查看HTTP Range标头。客户端可以请求一系列字节,服务器将只返回那些字节。使用GZIP压缩。

您可以从客户端调用一个操作,该操作将在请求部分日志之前提供带字节范围的索引。

HTTP标头有很多开销,因此您可以考虑一次发送100行或更多。

最后,查看分块传输编码,它允许您将数据流式传输到客户端。