【问题标题】:What's a good compression library for Java?什么是好的 Java 压缩库?
【发布时间】:2008-09-24 13:05:39
【问题描述】:

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

【问题讨论】:

  • 告诉我们更多关于客户端和服务器的信息。具体!图书馆等
  • 为了比较,这个项目 -- github.com/ning/jvm-compressor-benchmark -- 可能会有所帮助。它比较了六个编解码器,添加对其他编解码器的支持,更改测试文件,应该很容易。这是一个协作的努力。

标签: java compression


【解决方案1】:

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

编辑:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 好吧,在这种情况下,它通过 HTTP,但它会在另一端到达我们的客户端,所以我认为没有什么可以处理协商。如果我可以实现协商(或者更好地启用它),那将是更好的设计。关于如何处理的任何指示?
    【解决方案3】:

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

    如果您在千兆位 LAN 上,几乎所有压缩算法都会稍微降低您的程序速度。如果您通过 WAN 或 Internet 进行连接,则可以进行更多压缩。如果您连接到拨号,则应尽可能压缩。

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 2011-01-28
      • 2011-04-11
      • 1970-01-01
      • 2014-04-10
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多