如何在nodejs中保存返回的protobuf对象?

ifmq2ha2  于 2023-06-22  发布在  Node.js
关注(0)|答案(4)|浏览(103)

在我的代码中,一个函数返回一个protobuf对象,我想将它保存在一个文件xyz. pb中。
当我尝试使用fs.writefilesync保存它时,它没有保存它。
它本质上是循环的。所以,我尝试使用circular-json模块保存它,以确认它里面是否有任何东西,它是否有数据。
但是,正如我一开始使用circular-json,它没有正确的信息(没有正确的格式),它是没有用处的。
如何使用nodejs将此protobuf保存到文件中?
谢谢!

htzpubme

htzpubme1#

可以尝试使用文档中提到的流
如下

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();

或者你可以将buffer转换为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,这更方便。

2j4z5cfb

2j4z5cfb2#

Protocol Buffers的目的是将强类型消息序列化为二进制格式,然后再序列化回消息。如果要将消息从内存写入文件,请首先将消息序列化为二进制,然后将二进制写入文件。
NodeJS Buffer docs
NodeJS write binary buffer into a file
协议缓冲区JavaScript SDK文档
它应该看起来像这样:

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

bvuwiixz3#

我发现了如何轻松地将protobuf对象保存在文件中。
将protobuf对象转换为buffer并保存。

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

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

23c0lvtd4#

如果使用protobufjs模块,finish()方法返回您要保存的二进制数组。

const protoWriter = ProtoResource.encode(ProtoResource.fromObject(someJson));
fs.writeFileSync("./resources/output", protoWriter.finish());

当然,someJson应该符合您的ProtoResource消息定义。

相关问题