如何将任何对象转换为字节数组并将其保存在内存中?
How to convert any object to a byte array and keep it on memory?
我正在尝试为 Python 中的任何对象构建一个简单的字节数组转换器。我看了一下 pickle
但它只能创建一个文件,这不是我需要的。我还检查了 json.dump
但有些对象需要序列化程序才能转储。
我需要一个转换器来将我的对象保存在内存中,并且可以将任何对象转换为字节数组。
Pickler
的 file
参数只需要有一个 write(b)
接收字节的方法。原则上,你可以用你的方法 write(self,b)
编写你自己的 class 来做任何你想做的事情,并将那个 class 的对象传递给 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
或您想要的任何其他内容中,而不是像本例中那样打印字节。
我将其添加为实际答案,因为它似乎可以满足您的需求。您对 pickle.dump
的使用是问题所在,因为它旨在获取序列化对象并将其写入文件(尽管正如其他答案中指出的那样,它不一定必须这样做,但这不是重点)。
您要使用的函数是pickle.dumps
,其中returns直接将序列化对象作为字节数组:
someobject = 123
bytes = pickle.dumps(someobject)
我正在尝试为 Python 中的任何对象构建一个简单的字节数组转换器。我看了一下 pickle
但它只能创建一个文件,这不是我需要的。我还检查了 json.dump
但有些对象需要序列化程序才能转储。
我需要一个转换器来将我的对象保存在内存中,并且可以将任何对象转换为字节数组。
Pickler
的 file
参数只需要有一个 write(b)
接收字节的方法。原则上,你可以用你的方法 write(self,b)
编写你自己的 class 来做任何你想做的事情,并将那个 class 的对象传递给 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
或您想要的任何其他内容中,而不是像本例中那样打印字节。
我将其添加为实际答案,因为它似乎可以满足您的需求。您对 pickle.dump
的使用是问题所在,因为它旨在获取序列化对象并将其写入文件(尽管正如其他答案中指出的那样,它不一定必须这样做,但这不是重点)。
您要使用的函数是pickle.dumps
,其中returns直接将序列化对象作为字节数组:
someobject = 123
bytes = pickle.dumps(someobject)