lzo编解码器与python和java的区别

sd2nnvve  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(455)

我遇到了一个奇怪的问题:无法在java中膨胀/解压缩lzo压缩数据,这是从pythonlzo模块中压缩/压缩的,尽管两者似乎使用相同的本地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中使用

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都使用lzoversion2.03,python和java中的默认压缩策略都是lzo1x\u1。任何帮助都将不胜感激。

mgdq6dx1

mgdq6dx11#

只是猜测,但是在python中iirc字符串是utf-8,在java中是utf-16。如果我是你的话,我会仔细看看到底是什么让它成为java中的字符串。

相关问题