通过高压缩网络发送文本文件

Kev*_*oyd 2 java compression networking text

我有一个我想通过网络发送的文本文件,这个文件的大小可以从1KB到500KB不等.
我可以使用哪些算法/技术在发送之前紧密压缩该文件,以便通过网络发送最少量的字节并且压缩率高?

Pas*_*ent 6

对于压缩,我会考虑gzip,bzip2和LZMA(这不是一个详尽的列表,但这些是最着名的IMO).

然后,我会在网上寻找一些基准,并尝试收集各种文件类型(文本,二进制,混合)和大小(小,大,巨)的指标.即使您最感兴趣的是压缩率,您也可以查看:压缩率,压缩时间,内存占用量,减压时间.

根据A Quick Benchmark:Gzip vs. Bzip2 vs. LZMA:

[...] gzip非常快,内存占用少.根据这个基准测试,bzip2和lzma在速度或内存使用方面都不能与gzip竞争.bzip2具有比gzip更好的压缩率,这必然是bzip2普及的原因; 它比gzip慢,特别是在解压缩时使用更多的内存.然而,即使在较旧的硬件上,bzip2的内存要求现在也应该没有问题.

[...]

LZMA显然有可能成为*NIX系统上第三种常用的普通purporse压缩格式.它主要通过提供明显更好的压缩比来与bzip2竞争,同时仍然保持减压速度相对接近gzip的速度.

这在LZMA中得到证实- 比bzip2更好:

简而言之,这个描述令人印象深刻:

  • 更好的压缩比(当gzip达到38%时,压缩水平最佳,bzip2为34%,LZMA为25%).
  • 压缩比率增益主要在二进制文件上看到.
  • 解压缩时间比bzip2快得多(3-4倍).
  • 该算法允许并行执行(但我将在这里描述的工具是单线程).

还有一些缺点:

  • 压缩(不包括较低级别)比bzip2慢得多.
  • 压缩期间的内存要求比bzip2大得多.

因此,对于文本文件的压缩,同一站点报告:

我使用LZMA的第一件事就是压缩我的邮件存档.我选择的垃圾邮件文件(mbox格式的邮件)是528MB大,我将使用最大压缩比.在压缩期间,lzma进程大370MB,这就是:) bzip2低于7MB.用lzma压缩文件花了将近15分钟,用bzip2压缩文件不到4分钟.压缩比率非常相似:bzip2的输出文件为373MB,lzma的输出文件为370MB.lzma的减压时间为1m12s,bzip2的减压时间为1m48s.

最后,这是另一个带有图形结果的资源:压缩工具:lzma,bzip2和gzip

我真的建议您执行自己的工作台(因为您将仅压缩文本,非常小到小文件)以在您的环境中获得真实的指标,但我的赌注是,它LZMA不会为小文本文件提供显着的优势所以bzip2这将是一个不错的选择(即使LZMA小文件的时间和内存开销可能很低).

如果您打算执行从Java压缩,你会发现一个LZMA实现这里,一个bzip2的实施在这里(是Apache Ant AFAIK推出),gzip包括在JDK中.如果您不想或不能依赖第三方库,请使用gzip.