我正在开发一个 Node.js 应用程序,我需要序列化和反序列化 .thrift 文件中定义的结构的实例,如下所示:
struct Notification {
1: string subject,
2: string message
}
根据 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());
但我找不到如何使用 Thrift 的 nodejs 库完成此操作。请问有人可以帮忙吗?
最佳答案
好吧,在浪费了大量时间研究和尝试不同的解决方案之后,我终于找到了我自己问题的答案:
//SERIALIZATION:
var buffer = new Buffer(notification);
var transport = new thrift.TFramedTransport(buffer);
var binaryProt = new thrift.TBinaryProtocol(transport);
notification.write(binaryProt);
通知是我希望序列化的对象。此时,可以在 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);
假设已将以下行添加到 thrift 的 nodejs 库的 index.js 文件中:
exports.TFramedTransport = require('./transport').TFramedTransport;
exports.TBufferedTransport = require('./transport').TBufferedTransport;
exports.TBinaryProtocol = require('./protocol').TBinaryProtocol;
关于node.js - 在 nodejs 中使用 Apache Thrift 进行序列化-反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13310451/