從資料結構看,buffer類似一個陣列,元素是16進位制的兩位數
每個元素佔記憶體中的1個byte,1byte=8bit
計算機中,一個0或1,表示一個bit位0000 0000~1111 1111
對應十進位制0~255
,對應16進位制00~FF
buffer是node的底層模組,不需引入,直接使用
buffer中存的是二進位制資料,列印顯示是以16進位制的;
位元組byte是傳輸資料的最小單位
建立buffer
Buffer.from(str) 將一個字串轉換為buffer ,同時建立
var str = 'hello xqw'; var buf = Buffer.from(str);//將一個字串儲存到buffer中,並且建立buffer物件 console.log(buf); console.log(buf.toString());//將十六進位制轉為字串 console.log(buf.length);//佔用記憶體9byte console.log(str.length);//字串的長度,英文下1字母佔1位元組,1中文佔3位元組
Buffer.alloc(size) 建立一個指定大小的buffer(推薦)
var buf2 = Buffer.alloc(10) 向記憶體申請10byte的空間,大小固定;
console.log(buf2) <Buffer 00 00 00 00 00 00 00 00 00 00>
通過索引,來操作buf中的元素
buf2[0] = 88;
buf2[1] = 255;
buf2[2] = 0xaa; 十六進位制,以0x開頭
buffer的大小一旦確定,是不能修改的,buffer實際上是對底層記憶體的直接操作
比如上面的buf2, buf2[10] = 15 這樣是新增不進去的, 這和陣列是不一樣
buf2[3] = 256; // 1 0000 0000 前面的1超出了
buf2[4] = 556; // 10 0010 1100 前面的10超出了
讀取buffer值 console.log(buf2[2]); 170 只要數字在控制檯或頁面中輸出,預設一定是10進位制
輸出的是其它進位制呢?
buf2[2].toString(16) 輸出16進位制
buf2[2].toString(2) 輸出2進位制
- Buffer.allocUnsage(size) 建立一個指定大小的buffer,但是可能包含敏感資料
alloc建立後,會清除原資料,所以顯示是00 但是allocUnsage建立後,不會清除原資料,不安全,但是建立的速度更快
遍歷buffer
for (var i=0; i < buf2.length; i++) {
console.log(buf2[i]);
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結