我遇到了一个奇怪的问题,无法膨胀/解压缩java中的lzo压缩数据,这些数据是从python lzo模块中放气/压缩的,尽管两者似乎都使用相同的本机lzo编解码器实现。 为了提供更多细节,我从这里使用python模块:
https://github.com/jd-boyd/python-lzo
并压缩一个简单的字节“a”产生
import lzo
lzo.compress("a")
> '\xf0\x00\x00\x00\x01\x12a\x11\x00\x00'
使用
在java中压缩相同的字节“a”https://github.com/twitter/hadoop-lzo
产量
byte[] b = new byte[1];
b[0] = 'a'
ByteArrayInputStream inputByteStream = new ByteArrayInputStream(b);
ByteArrayOutputStream outputByteStream = new ByteArrayOutputStream();
LzoCodec lzoCodec = new LzoCodec();
Configuration conf = new Configuration();
lzoCodec.setConf(conf);
OutputStream outputStream = lzoCodec.createOutputStream(outputByteStream);
int data = inputByteStream.read();
while (data != -1) {
outputStream.write(data);
data = inputByteStream.read();
}
StringBuilder sb = new StringBuilder();
for (byte b : outputByteStream.toByteArray()) {
sb.append(String.format("%02X ", b));
}
System.err.println(sb.toString());
> 00 00 00 01 00 00 00 05 12 61 11 00 00
尾随部分看起来相似,即部分[11 00 00],但是标题肯定是看不见的。我确保python和java都使用lzo版本2.03,python和java中的默认压缩策略是LZO1X_1。任何帮助将不胜感激。
答案 0 :(得分:0)
只是猜测,但Python中的IIRC字符串是UTF-8,而在Java中它们是UTF-16。如果我是你,我会仔细研究它在Java中的实际内容。