我们称 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);
    }

}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐