Node.js_Buffer 緩衝區

Buffer 緩衝區node

雖然 JavaScript 支持未操做,可是並無 二進制數據 的原生程序員

node 引入了 Buffer 類,用於操做二進制數據數組

是 V8 引擎的擴展,其實是對內存的直接分配安全

每一個元素大小是 1 字節網絡

建立了一個 Buffer 後,它的大小就固定了
性能

一旦你把內容複製到一個 Buffer 後,它就會以二進制的形式存儲起來。spa

若是你須要添加更多的數據,就必須把 老的 Buffer 複製到一個更大的 Buffer 中3d

這是爲了性能而犧牲了一些程序員的開發便利code

計算機的工做原理是操做「開」和「關」狀態。blog

由於只有這樣兩種狀態,因此咱們稱此爲二元狀態直接操做二進制一般是最快的方法。

在網絡協議中,一般會指定一些字符來傳達信息

好比用固定位置上的比特來表示特殊的含義

在 DNS 請求中,頭兩個字節表示的數字是事務 ID,下一個字節的每一個比特都是獨立使用的,

每一位表示了在這個請求中是否使用 DNS 的某個功能

 

1. 基本使用

  • 建立一個 Buffer
  • let aBuf = Buffer.alloc(參數);
  • 不安全,可能包含舊數據,須要重寫全部數據
  • let bBuf  = Buffer.allocUnsafe(參數);
  • 不安全,可能包含舊數據,須要重寫全部數據

能夠使用 3 種參數

  • 指定 Buffer 的字節長度
  • 須要拷貝到 Buffer 裏的字節數組
  • 須要拷貝到 Buffer 裏的字符串
  • console.log() 打印時,以 16 進制顯示
  • 一個數據,就是一個字節,就是 8 個位
  • 一個字符,就是一個字節,方便數據的顯示
  • Buffer 保存 3 個字符(好比 RGB 顏色值)
  • let aColor = new Buffer([255,0,149]);    // <Buffer ff 00 95>
  • 獲取 Buffer 長度

aBuf.length

  • 填充 Buffer 內容

var cBuf = Buffer.allocUnsafe(10);

cBuf.fill(0);

  • 將 字符串 轉換爲 Buffer

var bufStr = Buffer.from('Hello Bat-Man');

// <Buffer 48 65 6c 6c 6f 20 42 61 74 2d 4d 61 6e>

一箇中文佔用 3 個字節

var hanZi = Buffer.from('綠巨人');

// <Buffer e7 bb bf e5 b7 a8 e4 ba ba>

  • 將 Buffer 轉換爲 字符串

var strBuf = bufStr.toString();

// 'haha'

5

5

5

5

5

5

5

5

5

5

55

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

相關文章
相關標籤/搜索