文章目录
- 🌟前言
- 🌟Buffer
- 🌟Buffer介绍
- 🌟Buffer对象:类似于数组,其元素是16进制的两位数。
- 🌟什么时候用Buffer
- 🌟Buffer的转换
- 🌟Buffer使用
- 🌟创建Buffer
- 🌟字符串转Buffer
- 🌟Buffer转字符串
- 🌟拼接Buffer
- 🌟Buffer不支持的编码类型
- 🌟判断是不是Buffer
- 🌟获取字节长度
- 🌟判断两个Buffer字节是否相同
- 🌟写在最后
🌟前言
哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些Node的基础知识和项目实战,今天带领大家初识一下 Node.js中的Global全局对象
之 Buffer
让我们一起来看看吧🤘
🌟Buffer
JavaScript
语言没有读取或操作二进制数据流的机制。 Buffer
类被引入作为 Node.js API
的一部分,使其可以在 TCP 流
或文件系统操作
等场景中处理二进制数据流
。
JavaScript
最初是被设计为处理HTML文档的,因此并不善于处理二进制数据
。Node
中需要处理网络协议
、操作数据库
、处理图片
、文件上传
等,还需要处理大量二进制数据
,为此Node提供了Buffer类
,该类封装了对访问连续内存块的操作
,可以处理内存中的数据及创建
、切分缓冲区
,还可以在两个缓冲区之间复制内存数据
。
🌟Buffer介绍
JavaScript
语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流
时,必须使用到二进制数据
。因此在 Node.js
中,定义了一个 Buffer 类
,该类用来在内存中创建一个专门存放二进制数据的缓存区
。
在 Node.js
中,Buffer 类
是随 Node 内核
一起发布的核心库。Buffer 库
为 Node.js
带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据
。Buffer
是一个典型的Javascript
和C++
结合的模块,性能相关部分用C++
实现,非性能相关部分用javascript
实现。Node
在进程启动时Buffer就已经加装进入内存,并将其放入全局对象,因此无需require
即可使用。
🌟Buffer对象:类似于数组,其元素是16进制的两位数。
<Buffer 68 74 74 70 73 3a 65>
🌟什么时候用Buffer
纯粹的
Javascript
支持unicode
码而对二进制不是很支持,当解决TCP流
或者文件流
的时候,处理流是有必要的,我们保存非utf-8字符串
,二进制
等等其他格式的时候,我们就必须得使用Buffer
。
🌟Buffer的转换
Buffer对象
可以和字符串
相互转换,支持的编码类型如下:ASCII
、UTF-8
、Base64
、Binary(二进制)
、Hex(十六进制)
🌟Buffer使用
方法 | 类型 | 描述 |
---|---|---|
Buffer.from(array) | 创建 | array 创建一个新的 Buffer |
Buffer.from(string[,encoding]) | 创建 | 新建一个包含所给的 JavaScript 字符串 string 的 Buffer 。 encoding 参数指定 string 的字符编码。 |
Buffer.alloc(size[,val[,encoding]]) | 创建 | 分配一个大小为 size 字节的新建的 Buffer 。 如果 fill 为 undefined ,则该 Buffer 会用 0 填充。 |
Buffer.concat(list[,totallength]) | 合并 | 返回一个合并了 list 中所有 Buffer 实例的新建的 Buffer |
buf.toString([encoding], [start], [end]) | 返回 | 根据 encoding 指定的字符编码解码 buf 成一个字符串。 |
buf.toJSON() | 返回 | 返回 buf 的 JSON 格式。 |
Buffer.isEncoding(encoding) | 检测 | 如果 encoding 是一个支持的字符编码则返回 true,否则返回 false 。 |
Buffer.isBuffer(obj) | 检测 | 如果 obj 是一个 Buffer 则返回 true ,否则返回 false 。 |
Buffer.byteLength(buf) | 获取 | 获取字节长度 |
buf.equals(otherBuffer) | 检测 | 如果 buf 与 otherBuffer 具有完全相同的字节,则返回 true,否则返回 false。 |
🌟创建Buffer
Buffer.from(array)
Buffer.from(string[,encoding])
Buffer.alloc(size[,val[,encoding]])
🌟字符串转Buffer
# 默认UTF-8
Buffer.from(string[,encoding])
🌟Buffer转字符串
buf.toString([encoding], [start], [end])
🌟拼接Buffer
Buffer.concat(list[,totallength])
🌟Buffer不支持的编码类型
Buffer.isEncoding(encoding)
🌟判断是不是Buffer
Buffer.isBuffer(obj)
🌟获取字节长度
Buffer.byteLength(buf)
🌟判断两个Buffer字节是否相同
如果
buf
与otherBuffer
具有完全相同的字节,则返回true
,否则返回false
。
buf.equals(otherBuffer)
示例:
// 例子一:编码一样,内容相同
var buf1 = Buffer.from('A');
var buf2 = Buffer.from('A');
console.log( buf1.equals(buf2) ); // true
// 例子二:编码一样,内容不同
var buf3 = Buffer.from('A');
var buf4 = Buffer.from('B');
console.log( buf3.equals(buf4) ); // false
// 例子三:编码不一样,内容相同
var buf5 = Buffer.from('ABC'); // <Buffer 41 42 43>
var buf6 = Buffer.from('414243', 'hex');
console.log(buf5.equals(buf6)); //true
只要比较的两者内容相同,buf.equals(otherBuffer)
就返回true
🌟写在最后
更多Node知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!
✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!