繁体   English   中英

将Java字节数组转换为Python字节数组

[英]Convert Java byte array to Python byte array

我知道,如果我想出这个,或者有人给我看,那将是一个前额扒手。 在发布任何问题之前,我尝试至少三个小时并进行相当多的搜索。 有几个提示很接近,但我采用/尝试过的任何提示似乎都有效。

我从Java获取一个byte []并使用Flask将它通过JSON(使用Gson)传递给python JSON。 这个byte []在收到时作为整数列表存储在python对象中,但现在我需要将它发送到MySQLdb并将其存储为blob。 数据内容是二进制文件数据。

如何将python整数列表[1,2,-3,-143 ....]转换为可以存储在MySQL中的东西? 我已经尝试过bytearray()和array.array(),但是当我直接从对象访问列表并尝试转换为一个字符串来存储整个MySQLdb时,这些会阻塞。

非常感谢任何链接或提示。

你可以将它加入一个bytestring(只是python 2.x下的一个字符串)。 最简单(如果不是最有效)的方法是仅修改数据,然后转换为字符和连接。 就像是:

data = [1,2,-3,-143, ...]
binData = ''.join(map(lambda x: chr(x % 256), data))

binData = ''.join(map(lambda x: chr(x % 256), attach.attcoll))
    sql_stmt = """INSERT INTO attachments (attno,filename,fileextension,projNo,procNo,wpattachment) \
    VALUES ('%s','%s','%s','%s','%s','%s') ON DUPLICATE KEY UPDATE filename='%s',fileextension='%s'""" % (attach.attno,\
    attach.filename,attach.fileextension,attach.projNo,attach.procNo,binData,attach.filename,attach.fileextension)

    try:
        cursor.execute(sql_stmt)
        conn.commit()
        cursor.close()
        conn.close()
        return 'SUCCESS'
    except MySQLdb.Error:
        cursor.close()
        conn.close()
        print "My SQL cursor execute error."
        return 'FAILURE'

我发现''.join(map(lambda x: chr(x % 256), data)) )对于我在python 2.7.9上的数据来说非常缓慢(约4分钟),其中对str(bytearray(map(lambda x: chr(x % 256), data)))进行了一些小改动str(bytearray(map(lambda x: chr(x % 256), data)))只花了大约10秒钟。

data = [1,2,-3,-143, ...]
binData = bytearray([x % 256 for x in data])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM