Cla*_*ara 5 serialization thrift node.js deserialization
我正在使用Node.js应用程序,我需要序列化和反序列化.thrift文件中定义的结构的实例,如下所示:
struct Notification {
1: string subject,
2: string message
}
Run Code Online (Sandbox Code Playgroud)
根据http://www.gettingcirrius.com/2011/03/rabbitmq-with-thrift-serialization.html上的教程,这在Java中很容易实现:
Notification notification = new Notification();
TDeserializer deserializer = new TDeserializer();
deserializer.deserialize(notification, serializedNotification);
System.out.println("Received "+ notification.toString());
Run Code Online (Sandbox Code Playgroud)
但我无法使用Thrift的nodejs库找到这是如何完成的.有人可以帮忙吗?
好吧,在浪费了大量时间进行研究并尝试不同的解决方案之后,我终于找到了自己问题的答案:
//SERIALIZATION:
var buffer = new Buffer(notification);
var transport = new thrift.TFramedTransport(buffer);
var binaryProt = new thrift.TBinaryProtocol(transport);
notification.write(binaryProt);
Run Code Online (Sandbox Code Playgroud)
通知是我希望序列化的对象.此时,可以在transport.outBuffers字段中找到字节数组:var byteArray = transport.outBuffers;
对于反序列化:
var tTransport = new thrift.TFramedTransport(byteArray);
var tProtocol = new thrift.TBinaryProtocol(tTransport);
var receivedNotif = new notification_type.Notification();
receivedNotif.read(tProtocol);
Run Code Online (Sandbox Code Playgroud)
假设已经从nodejs库为thrift添加了以下行到index.js文件中:
exports.TFramedTransport = require('./transport').TFramedTransport;
exports.TBufferedTransport = require('./transport').TBufferedTransport;
exports.TBinaryProtocol = require('./protocol').TBinaryProtocol;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3471 次 |
| 最近记录: |