Node.js Buffer:全面了解Node.js Buffer

一、Node.js Buffer簡介

Node.js的Buffer是用來處理二進位數據的類,它可以直接操作底層的二進位數據,也可以將二進位數據轉換成字元串格式。在Node.js中,Buffer是一個全局對象,無需使用require語句引入,即可在任何地方訪問。

二、Node.js Buffer使用場景

Node.js Buffer可用於處理網路、文件、壓縮、加密等數據流,包括:

1、文件流:文件操作時,讀取的內容默認為Buffer格式。

2、網路流:在發送網路請求時,請求體中的數據會被轉化為Buffer格式,並在接收網路響應時將收到的數據以Buffer形式返回。

3、加密:加密的輸入輸出均為Buffer格式。

4、字元串轉二進位數據:例如將字元串轉換成UTF-8編碼的二進位數據。

三、創建Buffer實例

可以使用Buffer.alloc(size[, fill[, encoding]])、Buffer.allocUnsafe(size)、Buffer.from(array)、Buffer.from(string[, encoding])等方法創建Buffer實例。

1、使用Buffer.alloc(size[, fill[, encoding]])方法創建Buffer實例


const buf1 = Buffer.alloc(10); // 創建長度為10,用0x00填充的Buffer實例
const buf2 = Buffer.alloc(10, 1); // 創建長度為10,用0x01填充的Buffer實例
const buf3 = Buffer.alloc(10, 'a', 'utf8'); // 創建長度為10,用'a'填充的Buffer實例

2、使用Buffer.allocUnsafe(size)方法創建Buffer實例


const buf = Buffer.allocUnsafe(10); // 創建長度為10,只是預分配了內存空間,是未初始化的Buffer實例 
buf.fill(0); // 初始化內存為0 

3、使用Buffer.from(array)方法創建Buffer實例


const buf = Buffer.from([0x01, 0x02, 0x03]); // 創建Buffer實例,長度為3,內容為0x01, 0x02, 0x03

4、使用Buffer.from(string[, encoding])方法創建Buffer實例


const buf = Buffer.from('hello world', 'utf8'); // 創建Buffer實例,長度為11(utf8編碼),內容為'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'

四、Node.js Buffer常用方法

Node.js Buffer常用方法包括:

1、buf.write(string[, offset[, length]][, encoding])

將一個字元串寫入Buffer中,並返回已寫入的位元組數。可以指定偏移量和長度。


const buf = Buffer.alloc(10);
const bytesWritten = buf.write('hello', 1, 3, 'utf8'); // 在偏移量為1的位置寫入'hel',返回已寫入的位元組數 3

2、buf.toString([encoding[, start[, end]]])

將Buffer對象轉換為字元串。默認將Buffer對象的全部內容轉換為字元串。


const buf = Buffer.from('hello world', 'utf8');
const str = b.toString('utf8'); // 轉換成字元串'hello world'

3、buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

將Buffer的內容複製到另一個Buffer中。


const buf1 = Buffer.from('hello');
const buf2 = Buffer.alloc(10);
const bytesCopied = buf1.copy(buf2, 1, 0, 3); // 將buf1的偏移量0~3的內容複製到buf2的偏移量1~4的位置,返回已複製的位元組數 3

4、buf.slice([start[, end]])

創建一個新的Buffer對象,與原Buffer對象共享內存但指定偏移量和長度範圍。


const buf1 = Buffer.from('hello');
const buf2 = buf1.slice(1, 3); // 創建一個新的Buffer實例,包含buf1的偏移量1~2的內容,即'el'

5、buf.toJSON()

返回一個將Buffer對象轉換成JSON對象後的結果。


const buf = Buffer.from('hello');
const json = buf.toJSON(); // 轉換成JSON對象
console.log(json); // { type: 'Buffer', data: [ 104, 101, 108, 108, 111 ] }

五、Node.js Buffer應用示例

1、文件讀取


const fs = require('fs');
 
fs.readFile('test.txt', (err, buf) => {
    if (err) {
        console.error(err);
        return;
    }
    const str = buf.toString('utf8');
    console.log(str);
});

2、字元串加密


const crypto = require('crypto');
 
const str = 'hello world';
const hash = crypto.createHash('md5');
const buf = Buffer.from(str, 'utf8');
hash.update(buf);
console.log(hash.digest('hex'));

3、獲取網路請求體的二進位數據


const http = require('http');
 
http.createServer((req, res) => {
    let chunks = [];
    req.on('data', chunk => {
        chunks.push(chunk);
    });
    req.on('end', () => {
        const buf = Buffer.concat(chunks);
        console.log(buf.toString('utf8'));
        res.end('success');
    });
}).listen(8000);

六、Node.js Buffer小結

Node.js Buffer提供了處理二進位數據的能力,可以用於處理文件流、網路流、加密等場景。Buffer的常用方法包括write、toString、copy、slice和toJSON等。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/158430.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-19 00:41
下一篇 2024-11-19 00:41

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演著非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • 瘋狂Python講義的全面掌握與實踐

    本文將從多個方面對瘋狂Python講義進行詳細的闡述,幫助讀者全面了解Python編程,掌握瘋狂Python講義的實現方法。 一、Python基礎語法 Python基礎語法是學習P…

    編程 2025-04-28

發表回復

登錄後才能評論