ZSTD使用luben进行字符串压缩



我一直在努力使用Luben库(v1.4.0-1)将常规字符串压缩为ZSTD格式。我做了以下操作:

byte[] zstdBytes = Zstd.compress(payload.getBytes(StandardCharsets.UTF_8));
ZstdInputStream zstdInputStream= new ZstdInputStream(new ByteArrayInputStream(zstdBytes));

然而,在读取zstdInputStream时,我得到以下错误:

java.io.IOException: Decompression error: Unknown frame descriptor
at com.github.luben.zstd.ZstdInputStream.readInternal(ZstdInputStream.java:142)
at com.github.luben.zstd.ZstdInputStream.read(ZstdInputStream.java:102)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.read(BufferedReader.java:182)

我对zstdInputStream代码的阅读如下:

try (ZstdInputStream zis = new ZstdInputStream(new UncloseableStream(payload))) {
try (Reader reader = new BufferedReader(new InputStreamReader(zis))) {
int data = reader.read();
while (data != -1) {
System.out.print((char) data);
data = reader.read();
}
}
}
编辑:我的有效载荷如下:{"customer"CA101"source":"live","operation":add", type";BC", container";c_789", token";BC_mc- l_CA101_20101206_0", priority";"{"guid"89 df67","id":"id789","llevel":"INFO","ldate":"20180526","lthread":"索引- 789","lmethod":"GET","afield":"aaa","bfield":"bbb","cfield":"ccc","dfield":"ddd","efield":"eee","data":"Hello world"fancy","hostname"uk-sx1-1"instanceid":"swg - 89","service":"indexing"grid":"UK"origin":"0","time": 1508年,"loffset": 7845年"}"}

所以我发现为什么它不工作。我不应该使用下面这行:

ZstdInputStream zstdInputStream= new ZstdInputStream(new   ByteArrayInputStream(zstdBytes));

基本上是这样的:

byte[] zstdBytes = Zstd.compress(payload.getBytes(StandardCharsets.UTF_8));
InputStream inputStream = new ByteArrayInputStream(zstdBytes);

最新更新