Как добавить двоичные данные в буфер в node.js

У меня есть буфер с некоторыми двоичными данными :

var b = new Buffer ([0x00, 0x01, 0x02]);

, и я хочу добавить 0x03.

Как я могу добавить больше двоичных данных? Я ищу в документации, но для добавления данных это должна быть строка, если нет, возникает ошибка(TypeError :Аргумент должен быть строкой):

var b = new Buffer (256);
b.write ("hola");
console.log (b.toString ("utf8", 0, 4)); //hola
b.write (", adios", 4);
console.log (b.toString ("utf8", 0, 11)); //hola, adios

Тогда единственное решение, которое я вижу здесь, это создать новый буфер для каждого добавляемого двоичного файла и копировать его в основной буфер с правильным смещением :

var b = new Buffer (4); //4 for having a nice printed buffer, but the size will be 16KB
new Buffer ([0x00, 0x01, 0x02]).copy (b);
console.log (b); //
new Buffer ([0x03]).copy (b, 3);
console.log (b); //

. Но это кажется немного неэффективным, потому что мне приходится создавать новый буфер для каждого добавления.

Знаете ли вы лучший способ добавления двоичных данных?

РЕДАКТИРОВАТЬ

Я написал BufferedWriter , который записывает байты в файл, используя внутренние буферы. То же, что и BufferedReader , но для записи.

Краткий пример:

//The BufferedWriter truncates the file because append == false
new BufferedWriter ("file")
   .on ("error", function (error){
        console.log (error);
    })

    //From the beginning of the file:
   .write ([0x00, 0x01, 0x02], 0, 3) //Writes 0x00, 0x01, 0x02
   .write (new Buffer ([0x03, 0x04]), 1, 1) //Writes 0x04
   .write (0x05) //Writes 0x05
   .close (); //Closes the writer. A flush is implicitly done.

//The BufferedWriter appends content to the end of the file because append == true
new BufferedWriter ("file", true)
   .on ("error", function (error){
        console.log (error);
    })

    //From the end of the file:
   .write (0xFF) //Writes 0xFF
   .close (); //Closes the writer. A flush is implicitly done.

//The file contains: 0x00, 0x01, 0x02, 0x04, 0x05, 0xFF

ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ

Используйте concat .

67
задан pathurs 31 July 2018 в 05:32
поделиться