2008-09-24 58 views
4

为了提高性能,我需要压缩部分应用程序的网络流量。我认为这意味着我需要远离一些像bzip2这样的新算法,我认为我听说它比较慢。什么是一个好的Java压缩库?

+0

告诉我们更多关于客户端和服务器的信息。细节!图书馆等 – 2008-09-25 07:10:26

+0

为了比较,这个项目 - https://github.com/ning/jvm-compressor-benchmark-可能会有所帮助。它比较了6种编解码器,并增加了对其他编码器的支持,更改测试文件应该很容易。这是一项协作努力。 – StaxMan 2011-04-14 18:07:11

回答

11

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

编辑:

阅读进一步的评论,它看起来像网络taffic是HTTP。取决于服务器,它可能支持压缩(特别是使用deflate/gzip时)。问题就在客户端上了。如果客户端是浏览器,它可能已经支持它。如果您的客户端是webservices客户端或http client,请查看该包的文档以查看它是否受支持。

看起来像jakarta-commons httpclient可能会要求您手动执行压缩。在客户端启用这个你需要做的是这样

.addRequestHeader("Accept-Encoding","gzip,deflate"); 
1

如果网络流量会通过HTTP,大部分的各种web服务器/ servlet容器对谈判的压缩和解,例如,mod_deflate模块为Apache支持。

1

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

如果你使用的是gigibit局域网,几乎所有的压缩算法都会让你的程序变慢一点。如果通过WAN或互联网连接,则可以承担更多的压缩。如果你连接到拨号,你应该尽可能压缩。

如果这是一个广域网,您可能会发现像Riverbed's这样的硬件解决方案更有效,因为它们可以跨越一系列流量进行工作,而且不需要对软件进行任何更改。

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