我写了一个节俭定义,并使用这个定义在一个文件中序列化多个记录(我在每个记录的开头添加了整个记录的大小)。简而言之,这就是我所做的。
boost::shared_ptr<apache::thrift::transport::TMemoryBuffer> transport(new apache::thrift::transport::TMemoryBuffer);
boost::shared_ptr<apache::thrift::protocol::TBinaryProtocol> protocol(new apache::thrift::protocol::TBinaryProtocol(transport));
myClass->write(protocol.get());
const std::string & data(transport->getBufferAsString());
之后我只是以二进制模式打印字符串数据。现在我想再次反序列化这个文件。如果文件中只有记录,我不会有任何问题,不幸的是我必须打印多个文件,所以我想我必须根据我保存在文件中的大小以及记录本身来使用偏移量。但是,我似乎找不到任何可以用来实现目标的示例,并且官方文档非常缺乏。有没有人给我任何提示。如果我遗漏了一些信息,请问。
更多信息:
当然我想使用 thrift 来反序列化。但是,一个文件可以包含多条记录。例如:假设我在包含 car-Information 的 thrift-definition 文件中定义了一个结构。现在我在一个输出文件中序列化多个汽车结构。序列化没问题,因为我只是附加数据。但是,如果我想反序列化,我必须知道一条记录从哪里开始,下一条从哪里开始。那是我的问题。我不知道如何告诉 Thrift 一张唱片的开始和结束位置。我在网上搜索过,但似乎找不到 c++ 的示例(到目前为止,我有一个用于 python 的示例,但无法将其翻译为 c++)。一个文件的结构可以描述为:[lenghtofrecord1][record1][lengthofrecord2][record2][...]
提前致谢
迈克尔