Как сохранить возвращенный объект protobuf в nodejs? - PullRequest
1 голос
/ 15 мая 2019

В моем коде функция возвращает объект protobuf, и я хочу сохранить его в файле xyz.pb.
Когда я пытаюсь сохранить его с помощью fs.writefilesync, он не сохраняется.

Это круговой характер.Итак, я попытался сохранить его с помощью модуля циклического json, чтобы проверить, есть ли внутри что-нибудь и есть ли у него данные.

Но, поскольку я использовал круговой json, он не имеет правильной информации (неправильно отформатированной) и бесполезен.

Как сохранить этот protobuf в файле с помощью nodejs?

Спасибо!

Ответы [ 3 ]

1 голос
/ 16 мая 2019

Цель буферов протокола - сериализовать строго типизированные сообщения в двоичный формат и обратно в сообщения. Если вы хотите записать сообщение из памяти в файл, сначала сериализуйте сообщение в двоичный файл, а затем запишите двоичный файл в файл.

NodeJS Буферные документы

NodeJS записывает двоичный буфер в файл

Буферы протокола Документы JavaScript SDK

Это должно выглядеть примерно так:

const buffer = messageInstance.serializeBinary()
fs.writeFile("filename.pb", buffer, "binary", callback)
1 голос
/ 17 мая 2019

Я нашел, как легко сохранить объект protobuf в файл.

Преобразуйте объект protobuf в буфер и затем сохраните его.

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

fs.writeFileSync("filename.pb", buffer);
1 голос
/ 16 мая 2019

вы можете попробовать использовать потоки , как указано в документации

, как указано ниже

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, это более удобно.

...