我正在尝试在Python中构建一个简单的将任何对象转换为字节数组的转换器。我查看了
我需要一个在内存中保留我的对象并可以将任何对象转换为字节数组的转换器。
pickle
,但它只能创建文件,这不是我需要的。我还查看了json.dump
,但某些对象需要序列化才能转储。我需要一个在内存中保留我的对象并可以将任何对象转换为字节数组的转换器。
pickle
,但它只能创建文件,这不是我需要的。我还查看了json.dump
,但某些对象需要序列化才能转储。我将这作为一个实际答案添加,因为它似乎解决了你的问题。问题在于你使用了 pickle.dump
,它的设计是将序列化后的对象写入文件(虽然正如其他答案中指出的那样,它不一定必须这样做,但这已经无关紧要了)。
你需要使用的函数是pickle.dumps
,它直接将序列化后的对象作为字节数组返回:
someobject = 123
someobject_bytes = pickle.dumps(someobject)
Pickler
的file
参数只需要有一个接收字节的write(b)
方法。原则上,您可以编写自己的类,其中包含您想要执行的write(self, b)
方法,并将该类的对象传递给Pickler
。
示例:
import pickle
class File:
def write(self,b):
print(b)
f = File()
p = pickle.Pickler(f)
object = 3.14
p.dump(object)
输出:b'\x80\x03G@\t\x1e\xb8Q\xeb\x85\x1f.'
与此示例中打印字节不同,您可以将它们附加到list
或任何其他您想要的地方。
dump
来处理不是文件对象的内容。但是,您必须定义一个符合特定接口的自定义类,该接口定义了一个函数,该函数将字节作为参数接收。或者...您可以跳过所有这些步骤,直接使用dumps
获取字节。您的回答是一个有趣的小知识点,但我无法想象在实际情况下它会成为OP的有用替代方案。 - Abion47
bytearray
函数吗? - Abion47bytearray
进行序列化)。 - Abion47dumps
函数吗? - Abion47pickle.dumps
,但是为什么需要将其转换为bytes
?目的是什么? - juanpa.arrivillaga