5

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

4

3 回答 3

11

您可以使用JDK 中内置的Deflater / Inflater 。也有 GZIPInputStream 和 GZIPOutputStream ,但是这真的取决于你的确切用途。

编辑:

阅读进一步的评论,看起来网络流量是 HTTP。根据服务器的不同,它可能支持压缩(尤其是 deflate/gzip)。然后问题就出现在客户端上。如果客户端是浏览器,它可能已经支持它。如果您的客户端是 Web 服务客户端或http 客户端,请检查该软件包的文档以查看它是否受支持。

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

.addRequestHeader("Accept-Encoding","gzip,deflate");
于 2008-09-24T13:07:50.440 回答
1

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

于 2008-09-24T13:12:00.523 回答
1

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

如果您在千兆 LAN 上,几乎任何压缩算法都会使您的程序变慢一点。如果您通过 WAN 或 Internet 进行连接,则可以进行更多压缩。如果您连接到拨号,您应该尽可能地压缩。

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

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

于 2009-08-20T05:23:04.087 回答