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

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

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

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

压缩算法压缩比压缩速度解压缩速度
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库,https://github.com/luben/zstd-jni

如何引入库:

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

 

参考:https://gitee.com/mirrors/zstandard

流子 CSDN认证博客专家 游戏程序员
关注游戏服务器架构及优化,监控预警,智能运维,数据统计分析等,对IO,MOBA,FPS,全球同服方面很感兴趣,希望能和兴趣相投的人一起搞点事。
https://github.com/jiangguilong2000/gamioo
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值