正文
对象的序列化与反序列化,可能大家更多接触的是谷歌的protobuf。
Thrift作为一个跨语言的RPC代码生成引擎,也具备此功能。
本文要说的是如何使用Thrift实现对象的序列化与反序列化,其实就是,如何以protobuf的方式使用Thrift。
Thrift描述文件:
1 | # filename: demo.thrift |
以生成的Python代码为例,Thrift生成的类型提供了两个关键方法:
1 | class Node: |
read/write方法按照指定协议传输对象,所以需要一个TProtocol对象。
TProtocol对象构造时需要传入一个TTransport对象,即传输层,所以还需要一个TTransport对象。
由于数据已经准备完毕,要做的只是反序列化。
好,TMemoryBuffer满足需求。
1 | class TMemoryBuffer(TTransportBase, CReadableTransport): |
TMemoryBuffer继承TTransportBase,也属于一种TTransport,内部封装了一个StringIO对象。
利用目标数据构造一个TMemoryBuffer对象,然后调用read/write方法实现反序列化和序列化。
需要注意的是,Python在初始化TMemoryBuffer对象时必须指定value。
序列化/反序列化的示例代码:
1 | #! /usr/bin/env python |
输出结果:
1 | node1: Node(host='localhost', port=8000) |