Ich habe einen Puffer mit einigen Binärdaten:
var b = new Buffer ([0x00, 0x01, 0x02]);
und ich möchte anhängen 0x03
.
Wie kann ich mehr Binärdaten anhängen? Ich suche in der Dokumentation, aber zum Anhängen von Daten muss es sich um eine Zeichenfolge handeln. Andernfalls tritt ein Fehler auf ( TypeError: Argument muss eine Zeichenfolge sein ):
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
Die einzige Lösung, die ich hier sehen kann, besteht darin, für alle angehängten Binärdaten einen neuen Puffer zu erstellen und ihn mit dem richtigen Versatz in den Hauptpuffer zu kopieren:
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>
Dies scheint jedoch etwas ineffizient zu sein, da ich für jedes Anhängen einen neuen Puffer instanziieren muss.
Kennen Sie einen besseren Weg zum Anhängen von Binärdaten?
BEARBEITEN
Ich habe einen BufferedWriter geschrieben , der mithilfe interner Puffer Bytes in eine Datei schreibt. Wie BufferedReader, jedoch zum Schreiben.
Ein kurzes Beispiel:
//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
LETZTES UPDATE
Verwenden Sie concat .