ZSTD 使用 luben 进行字符串压缩
ZSTD String compression using 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();
}
}
}
编辑:我的有效载荷如下:
{“客户”:“CA101”,“来源”:“现场”,“操作”:
“添加”,“类型”:“BC”,“容器”:“c_789”,“令牌”:“BC_mc- l_CA101_20101206_0”,“优先级”:5,“jsonPayload” : "{"guid":"89df67","id":"id789","llevel":"INFO","ldate":"20180526","lthread":"Indexing-789","lmethod":" GET","afield":"aaa","bfield":"bbb","cfield":"ccc","dfield":"ddd","efield":"eee","data":"你好世界“花式”,“主机名”:“uk-sx1-1”,“instanceid”:“swg-89”,“服务”:“索引”,“网格”:“英国”,“来源”:“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);
我一直在努力使用 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();
}
}
}
编辑:我的有效载荷如下: {“客户”:“CA101”,“来源”:“现场”,“操作”: “添加”,“类型”:“BC”,“容器”:“c_789”,“令牌”:“BC_mc- l_CA101_20101206_0”,“优先级”:5,“jsonPayload” : "{"guid":"89df67","id":"id789","llevel":"INFO","ldate":"20180526","lthread":"Indexing-789","lmethod":" GET","afield":"aaa","bfield":"bbb","cfield":"ccc","dfield":"ddd","efield":"eee","data":"你好世界“花式”,“主机名”:“uk-sx1-1”,“instanceid”:“swg-89”,“服务”:“索引”,“网格”:“英国”,“来源”:“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);