当前位置: 首页 > 面试题库 >

在Python中序列化二进制数据

乐钱青
2023-03-14
问题内容

我有一些二进制数据,它们在Python中是字节字符串数组的形式。

是否有一种可移植的方式来序列化其他语言可以读取的数据?

JSON丢失了,因为我刚刚发现它没有存储二进制数据的真正方法。其字符串应为Unicode。

我不想使用,pickle因为我不想存在安全风险,因此将其限制在其他Python程序中使用。

有什么建议吗?我真的很想使用内置库(或至少是标准Anaconda发行版中的一个库)。


问题答案:

如果您只需要字符串中的二进制数据并且可以轻松地恢复各个字符串之间的边界,则可以将它们作为原始字符串直接写入文件中。

如果您不能轻松地恢复字符串边界,那么JSON似乎是一个不错的选择:

a = [b"abc\xf3\x9c\xc6", b"xyz"]
serialised = json.dumps([s.decode("latin1") for s in a])
print [s.encode("latin1") for s in json.loads(serialised)]

将打印

['abc\xf3\x9c\xc6', 'xyz']

这里的技巧是,任意二进制字符串都是有效的latin1,因此始终可以将它们解码为Unicode,然后再次编码回原始字符串。



 类似资料:
  • 本文向大家介绍什么是C#中的二进制序列化和反序列化?如何在C#中实现二进制序列化?,包括了什么是C#中的二进制序列化和反序列化?如何在C#中实现二进制序列化?的使用技巧和注意事项,需要的朋友参考一下 将对象转换为非人类可读格式的二进制格式称为二进制序列化。 将二进制格式转换回人类可读格式称为反序列化? 为了在C#中实现二进制序列化,我们必须使用库System.Runtime.Serializati

  • 本文向大家介绍Java,C#使用二进制序列化、反序列化操作数据,包括了Java,C#使用二进制序列化、反序列化操作数据的使用技巧和注意事项,需要的朋友参考一下 java使用二进制序列化、反序列化的操作首先,要引入java.io下面相关包,或者直接写import java.io.*; 下面,为了书写操作的方便,采用复制文件,和throws声明异常的方式来写 初略代码,仅供参考! C#使用二进制序列化

  • 在我的实现中,我使用Java序列化在一组二进制对象之间发送,从通知头开始,通知头告诉要传递多少对象以及它们各自的大小。只是从简单的测试开始,我能够成功地传送头对象,然后我尝试只发送一个1024字节的数据对象。然而,在运行测试之后,我观察到以下情况: 第一个数据对象已成功传递并已接收。 当我发送第二个对象时,我看到来自第一个对象的一些数据仍然作为第二个数据集的前缀;从而截断第二个对象和。 有人能提供

  • 问题内容: 我必须报价, 1.将帐户保存到二进制(序列化)文件中。2.从二进制(序列化)文件加载(重新创建)帐户。 因此,首先,我正在查找确切的例子,而我却迷失了自己,在同样的情况下,人们提到xml,在我的脑海中,我认为它的意思像01010011000(二进制),而当我查看其他代码时,它看起来就像是正常的文本文件保存。 他到底是什么意思,有人可以举一个例子,或者给我一个更好地阐明这一点的网站吗?一

  • 在我的Android应用程序中,我创建了一个序列化的ArrayList并使用writeObject()将其写成二进制文件。我想把这个文件复制到PC上,读入一个程序(我需要用C++编写),在那里我会查看/编辑信息,把它写回文件,然后把它发送回Android设备,在那里它会被正确地解释。 是否存在序列化对象的结构定义?

  • 问题内容: 如何在Python中加,减和比较二进制数而不转换为小数? 问题答案: 您可以使用bin()和int()在二进制字符串表示形式之间进行转换