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