바이너리 데이터가있는 버퍼가 있습니다.
var b = new Buffer ([0x00, 0x01, 0x02]);
그리고 나는 추가하고 싶다 0x03
.
바이너리 데이터를 더 추가하려면 어떻게해야합니까? 문서에서 검색 중이지만 데이터를 추가하려면 문자열이어야합니다. 그렇지 않으면 오류가 발생합니다 ( 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
그런 다음 여기서 볼 수있는 유일한 해결책은 추가 된 모든 이진 데이터에 대해 새 버퍼를 만들고 올바른 오프셋을 사용하여 주요 버퍼에 복사하는 것입니다.
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을 사용하십시오 .