什么是一个很好的Java压缩库?

时间:2008-09-24 13:05:39

标签: java compression

我需要压缩部分应用程序的网络流量以提高性能。我认为这意味着我需要远离一些较新的算法,比如bzip2,我认为我听说它比较慢。

3 个答案:

答案 0 :(得分:11)

您可以使用JDK中内置的Deflater / Inflater。还有GZIPInputStream和GZIPOutputStream,但它实际上取决于你的确切用途。

编辑:

阅读进一步的评论,看起来网络流量是HTTP。它可能支持压缩(特别是使用deflate / gzip),具体取决于服务器。然后问题出现在客户端上。如果客户端是浏览器,它可能已经支持它。如果您的客户是webservices客户端或http client,请检查该软件包的文档以确定它是否受支持。

看起来jakarta-commons httpclient可能会要求您手动执行压缩。要在客户端启用此功能,您需要执行类似

的操作
.addRequestHeader("Accept-Encoding","gzip,deflate");

答案 1 :(得分:1)

如果网络流量通过HTTP,大多数各种Web服务器/ servlet容器都支持协商压缩,例如,Apache的mod_deflate。

答案 2 :(得分:1)

您的压缩算法取决于您尝试优化的内容以及可用的带宽量。

如果您使用的是gigibit LAN,几乎任何压缩算法都会让您的程序慢下来。如果您通过WAN或Internet连接,则可以承受更多压缩。如果你连接到拨号,你应该尽可能地压缩。

如果这是一个WAN,您可能会发现Riverbed's等硬件解决方案更有效,因为它们适用于一系列流量,并且不需要对软件进行任何更改。

我有一个测试用例,显示Deflate, Filtered, BZip2, and lzma之间的相对压缩差异。只需插入数据样本,然后测试两台机器之间的时间。