Zstandard 简称Zstd,是一款快速实时的开源数据压缩程序,由Facebook开发,源码是用C语言编写的。相比业内其他压缩算法(如Gzip、Snappy、Zlib)它的特点是:当需要时,它可以将压缩速度交换为更高的压缩比率(压缩速度与压缩比率的权衡可以通过小增量来配置),反之亦

Zstd-jni

Zstd拥有丰富的API,几乎支持所有流行的编程语言,Zstd-jni 是Java中提供的API然。 它具有小数据压缩的特殊模式,称为字典压缩,可以从任何提供的样本集中构建字典。

<dependency>

    <groupId>com.github.luben</groupId>

    <artifactId>zstd-jni</artifactId>

    <version>VERSION</version>

</dependency>

  1.  
    /*
  2.  
    序列化
  3.  
    */
  4.  
    public static <T> byte[] serialize(T result) throws IOException {
  5.  
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(512);
  6.  
    try (OutputStream outputStream = new ZstdOutputStream(byteArrayOutputStream)) {
  7.  
    // protostuff serialize
  8.  
    ProtostuffSerializer.serialize(result, outputStream);
  9.  
    return byteArrayOutputStream.toByteArray();
  10.  
    }
  11.  
    }
  12.  
     
  13.  
    /*
  14.  
    反序列化
  15.  
    */
  16.  
    public static <T> T deserialize(byte[] bytes, Class<T> clazz) throws IOException {
  17.  
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
  18.  
    try (InputStream inputStream = new ZstdInputStream(byteArrayInputStream)) {
  19.  
    // protostuff deserialize
  20.  
    return ProtostuffSerializer.deserialize(clazz, inputStream);
  21.  
    }
  22.  
    }
  1.  
    ZstdDictTrainer zstdDictTrainer = new ZstdDictTrainer(1024 * 1024, 32 * 1024);
  2.  
    // fileInput is a sample file
  3.  
    zstdDictTrainer.addSample(fileInput);
  4.  
    byte[] dic = zstdDictTrainer.trainSamples(true);
  5.  
     
  6.  
    /*
  7.  
    Zstd's training model
  8.  
    */
  9.  
    public static <T> byte[] serialize(T result) throws IOException {
  10.  
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(512);
  11.  
    try (ZstdOutputStream outputStream = new ZstdOutputStream(byteArrayOutputStream)) {
  12.  
    if (dic != null) {
  13.  
    outputStream.setDict(dic);
  14.  
    }
  15.  
    // protostuff serialize
  16.  
    ProtostuffSerializer.serialize(result, outputStream);
  17.  
    return byteArrayOutputStream.toByteArray();
  18.  
    }
  19.  
    }
  20.  
     
  21.  
    /*
  22.  
    Zstd's training model
  23.  
    */
  24.  
    public static <T> T deserialize(byte[] bytes, Class<T> clazz) throws IOException {
  25.  
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
  26.  
    try (ZstdInputStream inputStream = new ZstdInputStream(byteArrayInputStream)) {
  27.  
    if (dic != null) {
  28.  
    inputStream.setDict(dic);
  29.  
    }
  30.  
    // protostuff deserialize
  31.  
    return ProtostuffSerializer.deserialize(clazz, inputStream);
  32.  
    }
  33.  
    }

服务器:VM/4CPU i5-6500/CentOS 6

exp1: 4KB

version

compress

decompress

Ratio

Gzip jdk1.8 0.162ms 0.059ms 2.31
Snappy 1.1.7.2 0.005ms 0.002ms 1.83
Zstd 1.3.7-3 0.033ms 0.012ms 2.27
Zstd_Dic 1.3.7-3 0.020ms 0.029ms 3.81

exp2: 16KB

version

compress

decompress

Ratio

Gzip jdk1.8 0.279ms 0.126ms 4.29
Snappy 1.1.7.2 0.022ms 0.007ms 3.18
Zstd 1.3.7-3 0.049ms 0.002ms 4.39
Zstd_Dic 1.3.7-3 0.062ms 0.017ms 5.70

exp3: 43KB

version

compress

decompress

Ratio

Gzip jdk1.8 0.767ms 0.339ms 6.49
Snappy 1.1.7.2 0.111ms 0.044ms 4.36
Zstd 1.3.7-3 0.257ms 0.018ms 6.67
Zstd_Dic 1.3.7-3 0.199ms 0.061ms 8.12

exp4: 134KB

version

compress

decompress

Ratio

Gzip jdk1.8 1.786ms 1.026ms 13.34
Snappy 1.1.7.2 0.894ms 0.595ms 6.53
Zstd 1.3.7-3 0.411ms 0.198ms 14.74
Zstd_Dic 1.3.7-3 0.220ms 0.089ms 16.48

exp5:  654KB

version

compress

decompress

Ratio

Gzip jdk1.8 4.587ms 1.865ms 33.64
Snappy 1.1.7.2 2.069ms 1.430ms 8.86
Zstd 1.3.7-3 2.864ms 0.116ms 45.57
Zstd_Dic 1.3.7-3 0.426ms 0.218ms 47.38

引用链接:

https://github.com/facebook/zstd

https://github.com/luben/zstd-jni

Zstd-数据压缩组件的更多相关文章

  1. 【转载】.NET压缩/解压文件/夹组件

    转自:http://www.cnblogs.com/asxinyu/archive/2013/03/05/2943696.html 阅读目录 1.前言 2.关于压缩格式和算法的基础 3.几种常见的.N ...

  2. C# 压缩组件介绍与入门

    1.前言 作为吉日嘎拉权限管理系统最早的一批学习版用户,学了不少东西,在群里面也结识了很多朋友,更重要的是闲余时间,大家都发布很多可靠的外包工作.这次也是由于吉日嘎拉发布了一个有关“压缩文件损坏检测” ...

  3. C#编程总结(十三)数据压缩

    C#编程总结(十三)数据压缩 在进行文件存储或者数据传输时,为了节省空间流量,需要对数据或文件进行压缩.在这里我们讲述通过C#实现数据压缩. 一.GZipStream压缩 微软提供用于压缩和解压缩流的 ...

  4. Web前端性能优化教程04:压缩组件

    本文是Web前端性能优化系列文章中的第四篇,主要讲述内容:压缩组件.完整教程可查看:Web前端性能优化 基础知识 gzip编码:gzip是GUNzip的缩写,是使用无损压缩算法的一种,最早是用于Uni ...

  5. 支付宝 Android 版使用的开源组件

    支付宝 Android 版使用的开源组件 前言: 花了点时间整理了 支付宝 Android 客户端使用的开源组件,给需要的同学.在你不知道用什么开源框架的时候可以作下参考,毕竟支付宝是阿里的重量级产品 ...

  6. zstd --压缩工具

    Zstandard (也被称为zstd )是一款免费的开源,快速实时数据压缩程序,具有更好的压缩比 (约为 10:1). 安装 yum group install "Development ...

  7. openstack项目【day23】:keystone组件HTTP协议

    阅读目录 一 为何要学习HTTP协议 二 用户上网过程 三 HTTP协议 part1 http协议概述 part2 请求协议 part3 响应协议 四 抓包分析HTTP协议 一 为何要学习HTTP协议 ...

  8. HBase 架构与工作原理2 - HBase 组件

    本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.HBase 组件概览 Master-Slave 模式: HBase 体系结构遵循传统的 master-slave 模式,由一 ...

  9. Hadoop Hive概念学习系列之hive的数据压缩(七)

    Hive文件存储格式包括以下几类: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直 ...

  10. RT_THREAD之组件学习

    CmBacktrace (Cortex Microcontroller Backtrace)是一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪.定位,错误原因自动分析的开源库.支持 ...

随机推荐

  1. 标准库之 random 模块

    一.介绍random模块 1.1.random模块简介 random模块是Python标准库中用于生成伪随机数的模块,伪随机数是通过算法生成的数列,在一定范围内表现出随机性,虽然这些数列在一定程度上是 ...

  2. rancher发布nacos server docker 失败

    使用rancher发布nacos server 时报错 进入镜像查看日志发现报错No DataSource set 检查了好几遍环境变量已经全都配了,最后发现在nohup.out文件中指出没有找到na ...

  3. 洛谷P1381单词背诵

    单词背诵 题目描述 灵梦有 \(n\) 个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由 \(m\) 个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一 ...

  4. 小集训 CSP-S 模拟赛

    DAY 1 A.喜剧的迷人之处在于 小思维题不必细讲 B. 镜中的野兽 状压+容斥 $ gcd (x) + lcm(x) = m $ ,可以得知 $ gcd(x) $ 一定是 m 的因子,那么就可以枚 ...

  5. 云原生爱好者周刊:揪出 Prometheus 中时间戳抖动

    开源项目推荐 O11y toolkit O11y toolkit 是一个工具集,用来维护.调试和增强你的可观测性系统,改善我们日常对指标.日志和链路追踪的使用体验.例如 oy-scrape-jitte ...

  6. Hugging Face 与 TruffleHog 合作,实现风险预警

    我们非常高兴地宣布与 Truffle Security 建立合作伙伴关系并在我们的平台集成 TruffleHog 强大的风险信息扫描功能.这些特性是 我们持续致力于提升安全性 的重要举措之一. Tru ...

  7. TypeError: add_triangle_mesh(): incompatible function arguments. The following argument types are supported: 问题终于解决了!!!!

    1 2024.10.12 14:52 Traceback (most recent call last): File "terrain_creation.py", line 119 ...

  8. 小米R3G刷了padavan后时间不同步和定时关闭外网(wan)端口

    怎么刷openwrt或者padavan请见我2022年3月份的帖子 https://www.cnblogs.com/jar/p/15954037.html 最近遇到个新环境,遂拿出来用用 有1个问题和 ...

  9. Redis中常见的数据类型及其应用场景

    五种常见数据类型 Redis中的数据类型指的是 value存储的数据类型,key都是以String类型存储的,value根据场景需要,可以以String.List等类型进行存储. 各数据类型介绍: R ...

  10. CommonsCollections6(基于ysoserial)

    环境准备 JDK1.8(8u421)我以本地的JDK8版本为准.commons-collections(3.x 4.x均可这里使用3.2版本) cc3.2: <dependency> &l ...