Open linwu-hi opened 1 year ago
在Node.js应用中,我们常常需要处理网络协议、操作数据库、处理图片或接收上传文件等任务。在这些任务中,需要处理大量的二进制数据,而Node.js提供了一个专门用于处理二进制数据的类——Buffer。
Buffer
Buffer是一种在内存中分配的用于存储二进制数据的缓冲区,它类似于整数数组,但专门用于存储字节。Buffer的大小在创建时确定,并且不能更改。它是Node.js中处理二进制数据的核心工具之一。
Node.js提供了多种创建Buffer的方式,常用的有Buffer.from()和Buffer.alloc()。
Buffer.from()
Buffer.alloc()
const b1 = Buffer.from('hello'); const b2 = Buffer.from('hello', 'utf8'); const b3 = Buffer.from([104, 101, 108, 108, 111]); const b4 = Buffer.from(b3); console.log(b1, b2, b3, b4); // <Buffer 68 65 6c 6c 6f> <Buffer 68 65 6c 6c 6f> <Buffer 68 65 6c 6c 6f> <Buffer 68 65 6c 6c 6f>
const bAlloc1 = Buffer.alloc(10); // 创建一个大小为 10 个字节的缓冲区,会清空之前分配的内存 const bAlloc2 = Buffer.alloc(10, 1); // 创建一个长度为 10 的Buffer,其中全部填充了值为 `1` 的字节 console.log(bAlloc1); // <Buffer 00 00 00 00 00 00 00 00 00 00> console.log(bAlloc2); // <Buffer 01 01 01 01 01 01 01 01 01 01>
通过Buffer,我们可以将二进制数据转换成不同编码的字符串,例如:
const buffer = Buffer.from('hello'); console.log(buffer); // <Buffer 68 65 6c 6c 6f> const str = buffer.toString(); console.log(str); // hello
Buffer在Node.js中有广泛的应用场景,特别是与流的概念相关的操作。
通过流的形式,可以将一个文件的内容读取到另外一个文件。
const fs = require('fs'); const inputStream = fs.createReadStream('input.txt'); // 创建可读流 const outputStream = fs.createWriteStream('output.txt'); // 创建可写流 inputStream.pipe(outputStream); // 管道读写
在一些加解密算法中,我们会使用Buffer,例如crypto.createCipheriv的第二个参数key可以为string或Buffer类型。
crypto.createCipheriv
key
string
zlib.js是Node.js的核心库之一,它利用了Buffer的功能来操作二进制数据流,提供了压缩或解压功能。
zlib.js
Buffer的强大功能使得它在处理二进制数据时非常高效和灵活,适用于许多不同的应用场景。
面试官:说说对 Node 中的 Buffer 的理解?应用场景?
一、什么是Buffer?
在Node.js应用中,我们常常需要处理网络协议、操作数据库、处理图片或接收上传文件等任务。在这些任务中,需要处理大量的二进制数据,而Node.js提供了一个专门用于处理二进制数据的类——
Buffer
。Buffer
是一种在内存中分配的用于存储二进制数据的缓冲区,它类似于整数数组,但专门用于存储字节。Buffer
的大小在创建时确定,并且不能更改。它是Node.js中处理二进制数据的核心工具之一。二、使用Buffer
Node.js提供了多种创建Buffer的方式,常用的有
Buffer.from()
和Buffer.alloc()
。Buffer.from()
Buffer.alloc()
通过
Buffer
,我们可以将二进制数据转换成不同编码的字符串,例如:三、应用场景
Buffer
在Node.js中有广泛的应用场景,特别是与流的概念相关的操作。I/O操作
通过流的形式,可以将一个文件的内容读取到另外一个文件。
加解密
在一些加解密算法中,我们会使用
Buffer
,例如crypto.createCipheriv
的第二个参数key
可以为string
或Buffer
类型。zlib.js
zlib.js
是Node.js的核心库之一,它利用了Buffer
的功能来操作二进制数据流,提供了压缩或解压功能。Buffer
的强大功能使得它在处理二进制数据时非常高效和灵活,适用于许多不同的应用场景。参考文献