मेरे पास कुछ बाइनरी डेटा के साथ एक बफर है:
var b = new Buffer ([0x00, 0x01, 0x02]);
और मैं जोड़ना चाहता हूं 0x03
।
मैं अधिक बाइनरी डेटा कैसे जोड़ सकता हूं? मैं दस्तावेज़ीकरण में खोज कर रहा हूं, लेकिन डेटा को जोड़ने के लिए यह एक स्ट्रिंग होना चाहिए, यदि नहीं, तो एक त्रुटि होती है ( TypeError: Argument स्ट्रिंग होना चाहिए ):
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>
लेकिन यह थोड़ा अक्षम लगता है क्योंकि मुझे हर ऐपेंड के लिए एक नया बफर इंस्टेंट करना होगा।
क्या आप द्विआधारी डेटा को जोड़ने के लिए एक बेहतर तरीका जानते हैं?
संपादित करें
मैंने एक बफ़रड्राइवर लिखा है जो आंतरिक बफ़र्स का उपयोग करके किसी फ़ाइल को बाइट्स लिखता है। के रूप में ही 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
आखिरी अपडेट
कॉन्सेट का इस्तेमाल करें ।