在java中使用Zstd将数据进行压缩

我们称 Zstandard 或 Zstd 是一种快速的无损压缩算法,是针对 zlib 级别的实时压缩方案,以及更好的压缩比。它由一个非常快的熵阶段,由 Huff0 和 FSE 库提供。这个项目是作为开源的 BSD 许可收费的库,以及一个生成和解码 .zst 格式。

facebook和主流的压缩算法进行了对比,测试结果如下:

在java中使用需要先引入依赖:

        <dependency>
            <groupId>com.github.luben</groupId>
            <artifactId>zstd-jni</artifactId>
            <version>1.4.8-1</version>
        </dependency>

工具类压缩解压代码如下

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import com.github.luben.zstd.Zstd;

public class ZstdUtils {


    // 压缩数据
    public static byte[] compress(byte[] input) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        Zstd.compress(input, outputStream);
        return outputStream.toByteArray();
    }


    // 解压数据
    public static byte[] decompress(byte[] input, int decompressedSize) throws IOException{
        ByteArrayInputStream inputStream = new ByteArrayInputStream(input);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        Zstd.decompress(inputStream, outputStream, decompressedSize);
        return outputStream.toByteArray();
    }


    /**
     * @description: 使用zstd压缩字符串
     * @date: 2024/4/1 14:21
     */
    public static String compressString(String input)  {
        byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8);
        byte[] compressedBytes = Zstd.compress(inputBytes);
        return new String(compressedBytes, StandardCharsets.ISO_8859_1);
    }


    /**
     * @description: 使用zstd解压字符串
     * @date: 2024/4/1 14:21
     */
    public static String decompressString(String compressedInput)  {
        byte[] compressedBytes = compressedInput.getBytes(StandardCharsets.ISO_8859_1);
        final long size = Zstd.decompressedSize(compressedBytes);
        byte[] deCompressedBytes = new byte[(int)size];
        Zstd.decompress(deCompressedBytes,compressedBytes);
        return new String(deCompressedBytes, StandardCharsets.UTF_8);
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值