【问题标题】:Convert Java byte array to Python byte array将 Java 字节数组转换为 Python 字节数组
【发布时间】:2011-07-02 14:23:50
【问题描述】:

我知道,如果我解决了这个问题,或者有人给我看,那将是一个前额拍板。在发布任何问题之前,我尝试了至少三个小时和相当多的搜索。有几个提示很接近,但我采用/尝试过的任何提示似乎都不起作用。

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

如何将 python 整数列表 [1,2,-3,-143....] 转换为可以存储在 MySQL 中的内容?我已经尝试过 bytearray() 和 array.array(),但是当我直接从对象访问列表并尝试转换为字符串以存储到 MySQLdb 时,它们会窒息。

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

【问题讨论】:

    标签: java python mysql binary byte


    【解决方案1】:

    你可以将它加入一个字节串(在 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'
    

    【讨论】:

    • 这比我想象的更棒也更容易。有关如何将其导入 MySQL 的任何想法?
    • @kirtcathey 我几乎没有使用过 MySQL,也从未使用过 python,所以很遗憾没有。
    【解决方案2】:
    data = [1,2,-3,-143, ...]
    binData = bytearray([x % 256 for x in data])
    

    【讨论】:

    • 请提供一些解释以配合您的代码。
    【解决方案3】:

    我发现''.join(map(lambda x: chr(x % 256), data)) 在 python 2.7.9 上的数据非常慢(约 4 分钟),而对str(bytearray(map(lambda x: chr(x % 256), data))) 的小改动只需要大约 10 秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      相关资源
      最近更新 更多