J'ai un tampon avec des données binaires :
var b = new Buffer ([0x00, 0x01, 0x02]);
et je veux ajouter 0x03
.
Comment puis-je ajouter plus de données binaires ? Je recherche dans la documentation mais pour ajouter des données, cela doit être une chaîne de caractères, sinon une erreur se produit (TypeError: Argument must be a string) :
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
Donc, la seule solution que je vois ici est de créer un nouveau tampon pour chaque donnée binaire ajoutée et de le copier dans le tampon principal avec le décalage correct :
var b = new Buffer (4); //4 pour avoir un tampon joliment imprimé, mais la taille sera de 16 Ko
new Buffer ([0x00, 0x01, 0x02]).copy (b);
console.log (b); //
new Buffer ([0x03]).copy (b, 3);
console.log (b); //
Mais cela semble un peu inefficace car je dois instancier un nouveau tampon pour chaque ajout.
Connaissez-vous un meilleur moyen d'ajouter des données binaires ?
MODIFIER
J'ai écrit un BufferedWriter qui écrit des octets dans un fichier en utilisant des tampons internes. Similaire à BufferedReader mais pour l'écriture.
Un exemple rapide :
//Le BufferedWriter tronque le fichier car append == false
new BufferedWriter ("file")
.on ("error", function (error){
console.log (error);
})
//Depuis le début du fichier :
.write ([0x00, 0x01, 0x02], 0, 3) //Écrit 0x00, 0x01, 0x02
.write (new Buffer ([0x03, 0x04]), 1, 1) //Écrit 0x04
.write (0x05) //Écrit 0x05
.close (); //Ferme l'écrivain. Un flush est implicitement effectué.
//Le BufferedWriter ajoute du contenu à la fin du fichier car append == true
new BufferedWriter ("file", true)
.on ("error", function (error){
console.log (error);
})
//Depuis la fin du fichier :
.write (0xFF) //Écrit 0xFF
.close (); //Ferme l'écrivain. Un flush est implicitement effectué.
//Le fichier contient : 0x00, 0x01, 0x02, 0x04, 0x05, 0xFF
DERNIERE MISE A JOUR
Utilisez concat.