簡體   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