Java - 压缩大字符串

时间:2016-03-13 14:54:41

标签: java string compression gzip gzipoutputstream

在我的Java应用程序中,我从一些计算得到一个非常长的字符串(来自非常长的字符串,我的意思是大约600000个字符左右)。 但我需要将此字符串发送给客户端来处理它,因此我需要压缩字符串最多1000个字符。

我尝试过使用GZIPOutputStream和Inflater和Deflater类,在最好的情况下我得到了300000个字符的输出字符串,这是很好的压缩,但在我的情况下还不够。

我也尝试过压缩字符串 n 次,但输出比前一次大,所以只有一次性压缩成功。

那么,你建议我尝试一下吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我同意@Peter Lawrey的观点,严格按照这些要求,可能无法向客户传达如此重要的信息。

无论如何,我仍然建议三种可能的解决方案,具体取决于您的要求的灵活性:

  1. 如果您的所有输入字符串都有限制词汇(它不允许自由,随机的字母,符号和数字组合,但它仅限于某个 set 商业词汇,标识符和值),以及简单语法,您可以尝试设计您自己的压缩算法。例如:
  2. input symbol compressed symbol ------------ ----------------- client 1 bill 2 date 3 amount 4 value 5 price 6 tax 7

    如果语法很简单但词汇表不受限制,您可以执行初始自定义压缩以尽可能多地压缩文档的结构,然后再进行第二次GZIP压缩以压缩数据。 / p>

    并且不要忘记您必须将客户端应用程序与相应的解压缩程序捆绑在一起。

    无论如何,我承认这不是一件容易的事。

    1. 流媒体中向客户端应用程序发送响应。如果协议是HTTP,则可以使用Chunked Transfer Coding

    2. 如果其他一切都失败了,您必须分页结果并按需按页面将它们提供给客户端:客户端进行查询,服务器执行它并且只提供结果的第一页。然后,客户可以选择阅读下一页。