Tengo un búfer con algunos datos binarios:
var b = new Buffer ([0x00, 0x01, 0x02]);
y quiero añadir 0x03
.
¿Cómo puedo agregar más datos binarios? Estoy buscando en la documentación, pero para agregar datos debe ser una cadena, si no, se produce un error ( TypeError: Argument debe ser una cadena ):
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
Entonces, la única solución que puedo ver aquí es crear un nuevo búfer para cada dato binario agregado y copiarlo al búfer principal con el desplazamiento correcto:
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>
Pero esto parece un poco ineficiente porque tengo que crear una instancia de un nuevo búfer para cada agregado.
¿Conoce una forma mejor de agregar datos binarios?
EDITAR
Escribí un BufferedWriter que escribe bytes en un archivo usando búferes internos. Igual que BufferedReader pero para escritura.
Un ejemplo rápido:
//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
ÚLTIMA ACTUALIZACIÓN
Utilice concat .