gpt4 book ai didi

java - 如何使用 java-lzo 库解压缩 lzo 字节数组?

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:37 25 4
gpt4 key购买 nike

我正在尝试使用 java-lzo 库解压缩压缩的字节数组。我正在关注this reference

我将以下 ma​​ven 依赖项添加到 pom.xml -

<dependency>
<groupId>org.anarres.lzo</groupId>
<artifactId>lzo-core</artifactId>
<version>1.0.5</version>
</dependency>

我创建了一种方法,它接受 lzo 压缩字节数组和目标字节数组长度作为参数。

程序:

private byte[] decompress(byte[] src, int len) {
ByteArrayInputStream input = new ByteArrayInputStream(src);
ByteArrayOutputStream out = new ByteArrayOutputStream();

LzoAlgorithm algorithm = LzoAlgorithm.LZO1X;
lzo_uintp lzo = new lzo_uintp(len);
LzoDecompressor decompressor = LzoLibrary.getInstance().newDecompressor(algorithm, null);
LzoInputStream stream = new LzoInputStream(input, decompressor);

try {
int data = stream.read();
while (data != -1) {
out.write(data);
data = stream.read();
}
out.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
return out.toByteArray();
}

我一度陷入困境,因为stream.read()总是返回“-1”。我检查了输入数组,它充满了数据。此外,我使用stream.available()方法进行了检查,但在我的情况下,该方法也始终返回“0”。但是如果我像 input.available() 这样检查 InputStream ,那么返回值就是数组的长度。

错误与我所说的相同,它返回“-1” -

java.io.EOFException
at org.anarres.lzo.LzoInputStream.readBytes(LzoInputStream.java:183)
at org.anarres.lzo.LzoInputStream.readBlock(LzoInputStream.java:132)
at org.anarres.lzo.LzoInputStream.fill(LzoInputStream.java:119)
at org.anarres.lzo.LzoInputStream.read(LzoInputStream.java:90)

那么,在初始化 LzoInputStream 时我错了,还是之后我需要做一些事情?任何建议将不胜感激!

最佳答案

请确保 lzo 流在压缩期间被刷新并关闭。

关于java - 如何使用 java-lzo 库解压缩 lzo 字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45398848/

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