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

有帮助吗?

解决方案

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

编辑:

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

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

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

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top