支持MemoryView的Python3序列化程序
cerial的Python项目详细描述
快速,简单,更pythonic二进制序列化程序库。
Cerial结合了Python3特性、cython和内存视图来创建 用于打包和解包二进制结构的快速而简单的库。
去掉了很多有时会出现在周围的样板文件 用于序列化时的结构。
示例
下面是一个如何使用cerial处理udp数据包的快速示例。 首先我们定义结构:
>>>UDP=Struct('UDP',...('sport','uint16'),...('dport','uint16'),...('len','uint16'),...('csum','uint16'),...endianness='!'...)
与内置结构库不同,cerial需要绑定字段 一个名字。这是因为我们用 字典接口,而不是作为值的元组。
现在我们已经定义了一个结构,可以使用它来解析数据:
>>>data=bytearray(b'\x08R\x02\x02\x00w\xa9k')>>>hdr=UDP.parse(data)>>>hdr<UDPb'\x08R\x02\x02\x00w\xa9k'>
我们现在可以检查二进制结构:
>>>hdr['csum']43371>>>dict(hdr){'csum':43371,'len':119,'sport':2130,'dport':514}>>>bytes(hdr)b'\x08R\x02\x02\x00w\xa9k'
我们还可以更新各个字段,这些字段将直接写入 底层内存视图,不需要渲染步骤。
>>>hdr['csum']=0xffff>>>databytearray(b'\x08R\x02\x02\x00w\xff\xff')>>>bytes(hdr)b'\x08R\x02\x02\x00w\xff\xff'
待办事项
- 与各种原语(结构库)的特征奇偶性 支持
- 对位字段的一流支持
- 提高性能
- 支持只读存储器视图(例如支持字节)。上游 cython问题。
性能
目前比struct模块稍慢,但尽我所能 告诉,比其他类似的库(如pypacker)要快得多 或者在分析数据包时有点小动作。