用Java压缩数据,用Python解压

用Java压缩数据,用Python解压,java,python,python-2.7,Java,Python,Python 2.7,因此,在将JSON对象放入MySQL数据库之前,我尝试压缩(gzip或类似格式)JSON对象。我当前将数据存储为BLOB。我尝试使用以下Java方法压缩数据: public static byte[] compress(String str) throws Exception { if (str == null || str.length() == 0) { return null; } ByteArrayOutputStream obj = new B

因此,在将JSON对象放入MySQL数据库之前,我尝试压缩(gzip或类似格式)JSON对象。我当前将数据存储为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
将其存储在数据库中,我对此没有任何问题。我遇到的问题是在Python2.7中解密数据,我曾尝试使用
zlib.decompress()
,但没有成功。它似乎无法读取Java存储的数据。我还需要用Python编写一个转换脚本,将旧行压缩成这种新格式。因此,无论是用Java还是Python2.7压缩的,Python
decompress()
都需要可读的任何格式

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

谢谢

编辑:一些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

这里有一个帖子

否则,您尝试过gzip.py的gzip文档了吗。您可能需要一个临时文件。关于此方法的文档在下面的文章中提供了一个相当不错的解决方案

如果还没有,请确保正在从SQL返回字节。Python是灵活的,所以它可能是字符串。如果是这种情况,请在字符串上调用bytearray(字符串)

如果这不起作用:

  • SQL命令返回的数据是什么格式
  • 如果有错误,你会得到什么

  • gzip模块似乎只用于文件?我在使用数据库。啊,没错。很抱歉我显然没有仔细阅读你的帖子。gzip模块似乎只用于文件?我正在使用一个数据库。你可以尝试抽到一个临时文件,然后解压缩。我添加了一些牛肉,但是没有你的python代码(问题似乎在哪里),我有点不知所措,试一下这篇关于解压Gzip数据的帖子,我本来会把它放在评论栏供参考,但我还没有这个代表。我添加了一些python代码,以帮助提供更多关于发生了什么的信息。