gpt4 book ai didi

java - 如何创建传递给 Zstd.compress 的字典对象?

转载 作者:行者123 更新时间:2023-12-05 02:30:22 26 4
gpt4 key购买 nike

我在 Java 中使用 Zstd 压缩来压缩大型 JSON 负载。我正在使用 zstd-jni 库中的 Java 方法。我从 JSON 字符串创建一个字节数组并使用此方法。

public static byte[] compress(byte[] var0, int var1)

我读到 ZSTD 会在压缩和解压缩期间传递字典时提供更优的结果。如何创建 ZstdDictCompress 对象?我应该将什么字节数组和整数传递给构造函数?

public static long compress(byte[] var0, byte[] var1, ZstdDictCompress var2)

最佳答案

此示例适用于 https://github.com/luben/zstd-jni .

首先,您需要获取许多 json 样本。您不应该只使用一个或几个样本。之后你可以训练你的字典:

List<String> jsons = ...; // List of your jsons samples

ZstdDictTrainer trainer = new ZstdDictTrainer(1024 * 1024, 16 * 1024); // 16 KB dictionary

for(String json : jsons) {
trainer.addSample(json.getBytes(StandardCharsets.UTF_8));
}

byte[] dictionary = trainer.trainSamples();

现在你有了字节数组中的字典。

下一步是使用SAME字典进行压缩和解压。

// Compress
byte[] json = jsonString.getBytes(StandardCharsets.UTF_8);
ZstdDictCompress zstdDictCompress = new ZstdDictCompress(dictionary, Zstd.defaultCompressionLevel());
byte[] compressed = Zstd.compress(json, zstdDictCompress);

// Tricky moment, you have to pass json full length to decompress method
int jsonFullLength = json.length;

// Decompress
ZstdDictDecompress zstdDictDecompress = new ZstdDictDecompress(dictionary);
byte[] decompressed = Zstd.decompress(compressed, zstdDictDecompress, jsonFullLength);
String jsonString2 = new String(decompressed, StandardCharsets.UTF_8);

就是这样!

关于java - 如何创建传递给 Zstd.compress 的字典对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71886221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com