03小白學nodejs buffer

junwind發表於2021-05-25

從資料結構看,buffer類似一個陣列,元素是16進位制的兩位數
每個元素佔記憶體中的1個byte,1byte=8bit
計算機中,一個0或1,表示一個bit位
0000 0000~1111 1111 對應十進位制0~255,對應16進位制00~FF
buffer是node的底層模組,不需引入,直接使用
buffer中存的是二進位制資料,列印顯示是以16進位制的;
位元組byte是傳輸資料的最小單位

建立buffer

  1. 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位元組
  2. 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進位制
  1. Buffer.allocUnsage(size) 建立一個指定大小的buffer,但是可能包含敏感資料
    alloc建立後,會清除原資料,所以顯示是00 
    但是allocUnsage建立後,不會清除原資料,不安全,但是建立的速度更快

遍歷buffer

for (var i=0; i < buf2.length; i++) {
    console.log(buf2[i]);
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結
六月的風

相關文章