Reputation: 1444
With C++ Apache Thrift library, is it possible to use only Serialization/Deserialization and not use RPC services?
As I understand from this page, it is possible to do with Java library. However, I could not find the similar classes for C++ library.
Upvotes: 10
Views: 7905
Reputation: 1244
I realize that this question was asked a while ago. I encountered a similar use case recently (with an additional requirement - sending the serialized bytes to a Kafka cluster). Here's my answer with more complete code snippets that illustrate how the serialization and sending tasks can be done.
Upvotes: 1
Reputation: 13830
If you simply want to serialize into bytes (without having to write to a file), you can use TMemoryBuffer
.
boost::shared_ptr<TMemoryBuffer> buffer(new TMemoryBuffer());
boost::shared_ptr<TBinaryProtocol> binaryProtcol(new TBinaryProtocol(buffer));
obj->write(binaryProtcol.get());
obj->read((binaryProtcol.get()));
Upvotes: 3
Reputation: 584
In c++ you can use the TFileTransport:
boost::shared_ptr<TFileTransport> transport(new TFileTransport(filename));
boost::shared_ptr<TBinaryProtocol> protocol(new TBinaryProtocol(transport));
yourObj.write(protocol.get()); // to write
or
yourObj.read(protocol.get()); // to read
Upvotes: 4
Reputation: 18141
Here's a different mailing list post with some attached code showing how to use thrift to serialize to a file in C++.
http://mail-archives.apache.org/mod_mbox/thrift-user/201203.mbox/%[email protected]%3E
Upvotes: 1
Reputation: 1198
Yes it is possible. Thrift lacks documentation about this subject. Well, about anything really.
Here i found this:
http://mail-archives.apache.org/mod_mbox/thrift-user/201010.mbox/%[email protected]%3E
i personally use boost::serialization if there is no need to transfer data over network. Much clear syntax and supports JSON, XML and binary output/input.
Upvotes: 8