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

1 投票
3 回答
9232 浏览
提问于 2025-04-16 12:22

我知道如果我能搞明白这个问题,或者有人给我指点一下,我肯定会觉得自己很傻。每次发问之前,我都会先努力尝试至少三个小时,并且做很多搜索。虽然有一些提示看起来差不多,但我试过的都没能解决问题。

我在Java中有一个byte[],然后通过JSON(用Gson)把它传给用Flask写的Python程序。接收到后,这个byte[]在Python对象中被存储为一个整数列表,但现在我需要把它发送到MySQL数据库,并以blob的形式存储。这个数据内容是二进制文件数据。

我该如何把Python的整数列表[1,2,-3,-143....]转换成可以存储在MySQL中的格式呢?我试过bytearray()和array.array(),但当我直接从对象访问这个列表并尝试转换成字符串以便通过MySQLdb存储时,它们都出问题了。

如果有任何链接或提示,我会非常感激。

3 个回答

0

我发现用 ''.join(map(lambda x: chr(x % 256), data)) 这个方法在我的 Python 2.7.9 上处理数据时特别慢,大约需要 4 分钟。而稍微改动一下,使用 str(bytearray(map(lambda x: chr(x % 256), data))),只需要大约 10 秒钟。

3

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让这些数据更容易使用,我们通常会把它们放到一个叫做“变量”的容器里。变量就像一个盒子,里面可以存放不同类型的信息,比如数字、文字或者更复杂的数据结构。

当我们需要使用这些数据时,只需要告诉程序去这个“盒子”里拿就可以了。这样做的好处是,我们可以随时更新盒子里的内容,而不需要改变程序的其他部分。

另外,编程语言通常会有一些规则,告诉我们如何命名这些变量、如何使用它们,以及它们能存放什么类型的数据。这些规则帮助我们写出更清晰、更易懂的代码。

总之,变量是编程中非常重要的一个概念,它帮助我们管理和使用数据,让我们的程序更加灵活和高效。

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

你可以把它合并成一个字节串(在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'

撰写回答