【问题标题】:lzo codec difference b/w python and javalzo 编解码器 b/w python 和 java 的区别
【发布时间】:2014-05-13 05:50:18
【问题描述】:

我遇到了一个奇怪的问题,无法在 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。任何帮助将不胜感激。

【问题讨论】:

  • 配置类是怎么弄的?即相同的进口是什么?

标签: java hadoop compression lzo hadoop-lzo


【解决方案1】:

只是猜测,但 Python 中的 IIRC 字符串是 UTF-8,而在 Java 中它们是 UTF-16。如果我是你,我会仔细看看究竟是什么让它变成了 Java 中的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多