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/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

发表回复

登录后才能评论