在我的代码中,一个函数返回一个protobuf对象,我想将其保存在文件xyz.pb中。
当我尝试使用fs.writefilesync保存它时,没有保存它。
它本质上是圆形的。因此,我尝试使用Circular-json模块保存它,以确认其中是否有任何内容以及是否包含数据。
但是,由于我首先使用circular-json,它没有正确的信息(格式不正确),也没有用。
如何使用Node.js将这个protobuf保存在文件中?
谢谢!
答案 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 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);