У мене є буфер з деякими двійковими даними:
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); //<Buffer 00 01 02 00>
new Buffer ([0x03]).copy (b, 3);
console.log (b); //<Buffer 00 01 02 03>
Але це здається трохи неефективним, оскільки мені доводиться створювати новий буфер для кожного додавання.
Чи знаєте ви кращий спосіб додавання двійкових даних?
РЕДАГУВАТИ
Я написав 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 .