支持MemoryView的Python3序列化程序

cerial的Python项目详细描述


https://travis-ci.org/vodik/cerial.svg?branch=master

快速,简单,更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)要快得多 或者在分析数据包时有点小动作。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用“Wed,01 Jul 2015 17:32:41 EDT”解析字符串   java Storm apache升级(1.0.0到2.0.0)   java类驻留在不同的目录中,而不是包指定的目录。为什么?   将Java中的图像缩放到非常小的维度   java如何通过子文档从自定义方面访问ElasticSearch parentdoc字段   java如何在RationalSoftwareArchitect中使用findbugs?   Java中的事件提升处理   java值被添加到arrayList的所有索引中,而不是在“”时添加到最后一个索引中。正在使用arraylist的add()方法   JFrame中的java JPanel派生类   java如何用循环和异步方法模拟类   java Android阻止可绘制背景超出视图范围   为客户排序Java阵列   java Apache poi如何将工作表设置为枚举位置值属性?   java Rhino在使用自定义类参数调用javascript函数时出错   java格式化日期从年月日到年月日   spring如何修复java。lang.illegalargumentexception在此特定场景中是否尝试创建具有null实体的合并事件?   java如何创建更好的对象