Tôi có một bộ đệm với một số dữ liệu nhị phân:
var b = new Buffer ([0x00, 0x01, 0x02]);
và tôi muốn nối thêm 0x03
.
Làm cách nào để nối thêm dữ liệu nhị phân? Tôi đang tìm kiếm trong tài liệu nhưng đối với dữ liệu thêm vào, nó phải là một chuỗi, nếu không, sẽ xảy ra lỗi ( TypeError: Argument phải là một chuỗi ):
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
Sau đó, giải pháp duy nhất tôi có thể thấy ở đây là tạo một bộ đệm mới cho mọi dữ liệu nhị phân được thêm vào và sao chép nó vào bộ đệm chính với độ lệch chính xác:
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>
Nhưng điều này có vẻ hơi không hiệu quả bởi vì tôi phải tạo một bộ đệm mới cho mỗi phần phụ.
Bạn có biết cách tốt hơn để bổ sung dữ liệu nhị phân không?
BIÊN TẬP
Tôi đã viết một BufferedWriter ghi các byte vào một tệp bằng bộ đệm nội bộ. Giống như BufferedReader nhưng để viết.
Một ví dụ nhanh:
//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
CẬP NHẬT CUỐI CÙNG
Sử dụng concat .