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

问题描述:

我知道,如果我找出这一个或者有人向我展示,它将成为额头sla子手。在发布任何问题之前,我会尝试至少三个小时并进行相当多的搜索。有几个提示很接近,但我没有采用/尝试过的东西似乎工作。将Java字节数组转换为Python字节数组

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

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

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

你可以将它加入到一个字节串(只是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' 
+0

这真棒,比我想象的更容易。任何想法如何将其纳入MySQL? – kirtcathey 2011-02-24 09:54:24

+0

@kirtcathey我几乎没有使用过MySQL,从来没有从Python,所以不幸没有。 – cobbal 2011-02-24 09:57:26

我发现''.join(map(lambda x: chr(x % 256), data))是痛苦的缓慢(约4分钟)我的蟒蛇2.7.9,其中一个小的改变str(bytearray(map(lambda x: chr(x % 256), data)))只用了10秒左右的数据。

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

请提供一些解释以配合您的代码。 – Trent 2017-12-13 06:47:09