Mam bufor z danymi binarnymi:
var b = new Buffer ([0x00, 0x01, 0x02]);
i chcę dołączyć 0x03
.
Jak mogę dołączyć więcej danych binarnych? Szukam w dokumentacji, ale aby dołączyć dane, musi to być ciąg, jeśli nie, pojawia się błąd ( TypeError: Argument musi być stringiem ):
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
Wtedy jedynym rozwiązaniem, które widzę tutaj, jest utworzenie nowego bufora dla wszystkich dołączonych danych binarnych i skopiowanie go do głównego bufora z odpowiednim przesunięciem:
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>
Ale wydaje się to trochę nieefektywne, ponieważ muszę utworzyć wystąpienie nowego buforu dla każdego dodawania.
Czy znasz lepszy sposób na dołączanie danych binarnych?
EDYTOWAĆ
Napisałem BufferedWriter, który zapisuje bajty do pliku przy użyciu wewnętrznych buforów. To samo co BufferedReader, ale do pisania.
Szybki przykład:
//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
OSTATNIA AKTUALIZACJA
Użyj concat .