Zstandard (zstd)压缩算法在JAVA上的使用

Zstandard 是facebook厂商提供的一种高压缩率的实时压缩算法,他在压缩比和压缩速度上做了很好的平衡,同时还提供高速的解码器,针对小数据,也提供了一种叫做字典压缩算法,从样本中可以创建出字典集合数据,Zstandard库以BSD协议方式开源。

该算法是由Facebook的Yann Collet开发的一个无损数据压缩算法。Zstandard在设计上与DEFLATE(.zip、gzip)算法有着差不多的压缩比,但有更高的压缩和解压缩速度。
Zstandard使用字典算法(LZ77)结合熵编码法的有限状态熵(tANS)。—–Wikipedia

以下是基准测试数据对比:

默认Zstandard压缩的level=3,极限:Zstd Level22

压缩算法压缩比压缩速度解压缩速度
zstd 1.4.5 -12.884500 MB/s1660 MB/s
zlib 1.2.11 -12.74390 MB/s400 MB/s
brotli 1.0.7 -02.703400 MB/s450 MB/s
zstd 1.4.5 --fast=12.434570 MB/s2200 MB/s
zstd 1.4.5 --fast=32.312640 MB/s2300 MB/s
quicklz 1.5.0 -12.238560 MB/s710 MB/s
zstd 1.4.5 --fast=52.178700 MB/s2420 MB/s
lzo1x 2.10 -12.106690 MB/s820 MB/s
lz4 1.9.22.101740 MB/s4530 MB/s
lzf 3.6 -12.077410 MB/s860 MB/s
snappy 1.1.82.073560 MB/s1790 MB/s

github java库,GitHub - luben/zstd-jni: JNI binding for Zstd

如何引入库:

implementation group: 'com.github.luben', name: 'zstd-jni', version: '1.+';

如何使用:

压缩:

byte[] array=...;
byte[] compressArray = Zstd.compress(array);

解压缩:

byte[] compressArray=...
int size = (int) Zstd.decompressedSize(compressArray);
byte[] array = new byte[size];
Zstd.decompress(array, compressArray);

一般建议在长度大于256后,才开启压缩。

笔者把zstandard 和zlib做了基准测试,经过测试,发现和预期还是有差距, 我建议,该算法不是很有必要替换现有的用于协议之间传输的zlib压缩算法(或许它的字典算法能改善这个测试数据,或者是我的测试量太少了?),因为对于小数据来说,改善不明显,反而还有降低的可能,但是,强烈建议用于数据库(redis或者mysql)的海量数据的存储压缩解压,比如地图点数据,性能具有大幅提升。

sampleratiocompress speed(ms)decompress  speed(ms)
algorithmzlibzstandardzlibzstandardzlibzstandard
17000中文字2.0051.8450.8730.19570.1540.0402
1000英文2.0141.9060.03190.01910.01170.0091
437英文2.2532.1630.02370.01670.00690.0082
256 英文1.6731.610.01990.01410.0070.0091
128 英文1.2931.2430.01150.01020.00180.0068

以下是官方的图,可以做下对比:下图表示,zstandard比zlib,同样的压缩比情况下,速度高于zlib,同样的速度情况下,压缩比要高于zlib

参考:zstandard: Zstandard(zstd)是 Facebook 开源的一种快速无损压缩算法,以 zlib 级为目标的实时压缩场景和更好的压缩比

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值