纯Python中的Mini Protobuf库.
特征
- 纯Python。
- 功能丰富但轻巧。甚至可以在MicroPython上运行。
- 支持类似struct的格式字符串和类似ctypes的结构表示形式(即Structure._field_)作为架构。
- 支持通过RawWireAPI 对给定的序列化消息进行无模式检查。
import minipb
# Create the Wire object with schema
hello_world_msg = minipb.Wire([
('msg', 'U') # 'U' means UTF-8 string.
])
# Encode a message
encoded_msg = hello_world_msg.encode({
'msg': 'Hello world!'
})
# encoded_message == b'\n\x0cHello world!'
# Decode a message
decoded_msg = hello_world_msg.decode(encoded_msg)
# decoded_msg == {'msg': 'Hello world!'}
# Alternatively, use the format string
hello_world_msg = minipb.Wire('U')
# Encode a message
encoded_msg = hello_world_msg.encode('Hello world!')
# encoded_message == b'\n\x0cHello world!'
# Decode a message
decoded_msg = hello_world_msg.decode(encoded_msg)
# decoded_msg == ('Hello world!',)
注意:
尽管与官方Protobuf相比,minipb模块更轻巧,但通过加载后,模块本身仍使用约15KB的RAM。因此,建议在MicroPython实例上使用MiniPB脚本时,至少要有24KB的可用内存。对于更复杂的程序逻辑,建议具有至少48KB可用内存的实例。在具有大量RAM的系统(例如Pyboards和Unix构建)上,安装包括复制minipb.py到文件系统并用logging从 安装模块。对于RAM受限的目标,有两个选项:交叉编译和冻结字节码。后者提供了最大的节省。有关更多说明,请参见官方文档。
|