Buffer 類的實例類似於整數數組,但 Buffer 的大小是固定的、且在 V8 堆外分配物理內存。 Buffer 的大小在被創建時確定,且無法調整。
Buffer 類在 Node.js 中是一個全局變量,因此無需使用 require('buffer').Buffer。
#什么是buffer
緩沖區Buffer 是暫時存放輸入輸出數據的一段內存
js語言自身只有字符串數據類型,沒有二進制數據類型,而處理TCP和文件流的時候,必須處理二進制數據
nodejs提供了一個Buffer對象來提供對二進制數據的操作
是表示固定內存分配的全局對象,也就是說要放到緩存區中的字節數據需要提前確定
Buffer好比由一個八位字節組成的數組,可以有效的在javascript中存儲二進制數據
#什么是八位字節?
字節byte是計算機存儲時的一種計量單位,一個字節表示8位二進制數
一個位就代表一個0或1,每8各位(bit)組成一個字節(byte)
字節是網絡傳輸信息的單位
一個字節最大值十進制表示是255
1 1 1 1 1 1 1 1 2的8次方減1
一個單詞是兩個字節
ASCII 碼使用指定的7位或8位二進制數組合來表示128或256種可能的字

# 定義buffer的三種方式
編碼是做翻譯用的
他是一個全局對象,不需要require和引用,里面存儲的是二進制數字節
第一種方式 new Buffer(size) size 是多少個字節,類似於數組中的length
例:var buffer = new Buffer(1);//buffer的長度是1 ,長度固定之后不可以改變
buffer[0] = 16;
console.log(buffer); //<Buffer 0e>
buffer[1] = 16;//長度固定之后不可以改變
console.log(buffer);//<Buffer 0e>
第二種方式 數組創建 new buffer(Array);
例: var bufferArr = new Buffer([1,2,3]);//數組的長度就是buffer的長度
console.log(bufferArr); // <Buffer 01 02 03>
第三種方法 字符串創建 new Buffer(str,[encoding]);
例:var bufferStr = new Buffer('劉'); //一個漢字是三個字節
console.log(bufferStr);//<Buffer e5 88 98>
#Buffer和字符串之間的轉換
字符串轉換成Buffer
var bufStr = new Buffer('劉詩雨');
console.log(bufStr);
//<Buffer e5 88 98 e8 af 97 e9 9b a8>
Buffer轉字符串
bufStr.toString('utf8');
console.log(
bufStr.toString('utf8')
);
//劉詩雨
#Buffer的常用方法
1.合並Buffer Buffer.concat(list[, totalLength])
var buf1 = new Buffer(1);
buf1[0] = 1;
var buf2 = new Buffer(2);
buf2[0] = 2;
buf2[1] = 3;
var hebing = Buffer.concat([buf1,buf2]);//<Buffer 01 02 03> 默認不寫的話是兩個buffer合起來的長度
hebing = Buffer.concat([buf1,buf2],3);//<Buffer 01 02 03>
hebing = Buffer.concat([buf1,buf2],2);//<Buffer 01 02>如果長度小於兩個buffer之和的長度則是幾就留幾個
hebing = Buffer.concat([buf1,buf2],5);//<Buffer 01 02 03 00 00> 如果長度大於兩個buffer之和的長度則后面的補0
2. 復制 buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
var buf11 = new Buffer('劉');
var buf12 = new Buffer('詩');
var buf13 = new Buffer('雨');
var buffers = new Buffer(12);
buf11.copy(buffers,0,0,3);
console.log(
buffers.toString('utf8',0,3)
);//劉
buf12.copy(buffers,3,0,3);
console.log(
buffers.toString('utf8',0,6)
);//劉詩
buf13.copy(buffers,6,0,3);
console.log(
buffers.toString('utf8',0,9)
);//劉詩雨
3.判斷是否是Buffer.isBuffer
console.log(
Buffer.isBuffer(
buffers)
); //true
4.獲取字節的長度 Buffer.byteLength
console.log(Buffer.byteLength('劉詩雨'));//9 一個漢字是三個字節 一個英文字符是一個字節
