用Java压缩数据并用Python解压缩

时间:2013-12-06 21:55:42

标签: java python python-2.7

所以我尝试压缩(gzip或类似格式)JSON对象,然后将它扔到我的MySQL数据库中。我目前将数据存储为BLOB。我试图使用以下Java方法来压缩数据:

public static byte[] compress(String str) throws Exception {
    if (str == null || str.length() == 0) {
        return null;
    }

    ByteArrayOutputStream obj = new ByteArrayOutputStream();
    GZIPOutputStream gzip = new GZIPOutputStream(obj);
    gzip.write(str.getBytes("UTF-8"));
    gzip.close();
    return obj.toByteArray();
}

然后使用setBytes()使用PreparedStatement将其存储在数据库中,并且对此没有任何问题。我遇到的问题是解密Python 2.7中的数据我尝试使用zlib.decompress()无济于事。它似乎无法读取Java存储的数据。我还需要在Python中编写一个转换脚本,将旧行压缩为这种新格式。因此无论Python decompress()是否使用Java或Python 2.7压缩,我都需要读取任何格式

我很乐意提供更多信息,以帮助找到解决我的困境的方法。

感谢。

编辑:一些Python代码:

class KitPvPMatch(Base):
    """ The SQLAlchemy declarative model class for a User object. """
    __tablename__ = 'kit_pvp_matches'
    __table_args__ = {
        'mysql_engine': 'InnoDB',
        'mysql_charset': 'utf8'
    }

    match_id = Column(INTEGER(11), autoincrement=True, primary_key=True, nullable=False)
    season = Column(Unicode(5), nullable=False)
    winner = Column(Unicode(16), nullable=False)
    loser = Column(Unicode(16), nullable=False)
    ladder_id = Column(TINYINT(4), nullable=False)
    data = Column(BLOB, nullable=False)

# The line in question
jsonData = json.loads(zlib.decompress(match.data))

# The error
error: Error -3 while decompressing data: incorrect header check

1 个答案:

答案 0 :(得分:1)

这是一篇超过unzipping using zlib with a stream.

的帖子

否则,您是否尝试过gzip文件用于gzip.py.您可能需要临时文件。 gzip is here.的文档在decompression.的以下帖子中,这种方法有一个相当不错的解决方案。

如果还没有,请确保从SQL获取字节数。 Python很灵活,所以它可能是一个字符串。如果是这种情况,请在字符串上调用bytearray(string)。

如果不起作用:

  1. SQL命令返回时数据的格式是什么?
  2. 你有什么错误?