我正在尝试使用 java-lzo 库解压缩压缩字节数组。我正在关注这个参考。
我在 pom.xml中添加了以下maven 依赖项-
<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 时我错了,或者在那之后我需要做些什么?任何建议将不胜感激!