紧凑、高效、可扩展的二进制序列化格式

extprot的Python项目详细描述


extprot:紧凑、高效、可扩展的二进制序列化格式

这是“extprot”序列化方案的一个python实现,其
详细信息请参见:

http://eigenclass.org/r2/writings/extprot extensible protocol s intro

类似于google的协议缓冲区和apache thrift,extprot允许定义结构化数据“消息”。消息本质上是一组类型化的键值对,它们可以有效地序列化到或从
压缩二进制格式,并在语言无关的“协议”文件中定义。
这里有一个简单的extprot消息示例:

message person={
id:int;
name:string;
电子邮件:[string]
}

这样的协议描述
被编译成一组python类,这些类可以使用
标准语法和习惯用法进行操作。如果上面的协议记录在文件
“person.proto”中,这里有一个简单的示例说明如何使用该协议:

>;>extprot.import廑u protocol(“person.proto”,globals())
>;>p1=person(1,“guido”)
>;[]br/>>;>p1.emails.append(“guido@python.org”)
>;>;p1.emails.append(7)所有字段都会动态地进行类型检查
回溯(大多数最近调用的最后一个):

valueerror:不是有效字符串:7
>;>;print repr(p1.to_string())
'\x01\x1f\x03\x00\x02\x03\x05 guido\x05\x13\x01\x03\x10guido@python.org'
>;>;print person.from_string(p1.to_string()).name
'guido'
>;

extprot与相关序列化技术相比具有优势:

*强大的类型系统;强类型元组和列表,标记为不相交的联合,参数多态性。
*自定界数据;所有序列化的消息都指示其长度,
允许轻松地流式传输和跳过消息。
*自描述数据;可以重建消息的“骨架”
没有协议定义。
*紧凑的二进制格式;与协议缓冲区/节约相当,但由于具有自限制特性,会有一些开销。

这些特性结合在一起,使extprot具有很强的可扩展性,通常允许
消息在协议
扩展之间保持向后*和*向前兼容性,这些扩展包括:向消息添加字段,向
元组添加元素,向不相交的并集添加事例,以及将基元类型提升为
元组,list或union。

extprot.import_protocol()函数将动态加载协议文件并将其转换为相应的python类结构。这在开发协议时非常方便,因为它避免了额外的编译步骤,但确实增加了一些启动开销,并且需要pyparsing模块。

使用extprot.compile_protocol()函数或通过extprot/compiler.py管道传输文件,如下所示:

$cat mydefs.proto python extprot/compiler.py>;mydefs.py

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

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish