如何在Node.js中保存返回的Protobuf对象?

时间:2019-05-15 11:56:36

标签: node.js protocol-buffers hyperledger-fabric google-protocol-buffer

在我的代码中,一个函数返回一个protobuf对象,我想将其保存在文件xyz.pb中。
当我尝试使用fs.writefilesync保存它时,没有保存它。

它本质上是圆形的。因此,我尝试使用Circular-json模块保存它,以确认其中是否有任何内容以及是否包含数据。

但是,由于我首先使用circular-json,它没有正确的信息(格式不正确),也没有用。

如何使用Node.js将这个protobuf保存在文件中?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以尝试使用流like mentioned in documentation

如下

const crypto = require('crypto');
const fs = require('fs');
const wstream = fs.createWriteStream('fileWithBufferInside');
// creates random Buffer of 100 bytes
const buffer = crypto.randomBytes(100);
wstream.write(buffer);
wstream.end();

或者您可以将缓冲区转换为JSON并将其保存在文件中,如下所示:

const crypto = require('crypto');
const fs = require('fs');
const wstream = fs.createWriteStream('myBinaryFile');
// creates random Buffer of 100 bytes
const buffer = crypto.randomBytes(100);
wstream.write(JSON.stringify(buffer));
wstream.end();

,如果您的应用程序逻辑不需要使用同步性质,则不应使用writeFileSync,因为它会阻塞您的代码,直到结束为止,因此请小心。 尝试使用writeFile或Streams更为方便。

答案 1 :(得分:1)

协议缓冲区的目的是将强类型的消息序列化为二进制格式,然后再转换回消息。如果要将消息从内存写入文件,请首先将消息序列化为二进制文件,然后将二进制文件写入文件。

NodeJS Buffer docs

NodeJS write binary buffer into a file

Protocol Buffers JavaScript SDK Docs

它应该看起来像这样:

const buffer = messageInstance.serializeBinary()
fs.writeFile("filename.pb", buffer, "binary", callback)

答案 2 :(得分:1)

我发现了如何轻松将protobuf对象保存在文件中。

将protobuf对象转换为缓冲区,然后保存。

const protobuf = somefunction(); // returning protobuf object  
const buffer = protobuf.toBuffer();  

fs.writeFileSync("filename.pb", buffer);