2

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

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

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

那么,你建议我尝试什么?

谢谢你。

4

1 回答 1

0

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

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

  1. 如果你所有的输入字符串都有一个受限制的词汇表(它不允许字母、符号和数字的自由、随机组合,但它被限制为一特定的商业词、标识符和值),还有一个简单的语法,您可以尝试设计自己的压缩算法。例子:

input symbol compressed symbol ------------ ----------------- client 1 bill 2 date 3 amount 4 value 5 price 6 tax 7

如果语法简单但词汇量没有那么受限,您可以执行初始自定义压缩以尽可能多地压缩文档的结构,然后执行第二次 GZIP 压缩以压缩数据。

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

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

  1. 以流的形式将响应传递给客户端应用程序。如果协议是 HTTP,您可以使用Chunked Transfer Coding.

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

于 2016-03-14T13:43:02.947 回答