| Buffer.from() - 创建buffer // 老方法 new Buffer(str, encode);
| toString() - Buffer转字符串
| length - 返回Buffer的长度
| concat([buf1, buf2], 输出的长度) - 合并
| slice(start, end) - 截取
| copy(buffer, 开始目标位置, start, end) - 拷贝
| compare() - 比较两个buffer的大小
| fill() - 用指定的值填充Buffer
| indexOf(val) - 返回指定字符所在Buffer的位置
| lastIndexOf() - 从后向前查找
| includes(val, begin, uncode) - 查找是否存在
| keys() - 获取
| write() - 向指定的buffer写入内容
|
| Buffer.isBuffer(buf) - 是否是一个buffer
| Buffer.isEncoding(‘utf-8’) - 检测是否是一个有效的编码
| Buffer.byteLength - 判断字符的长度
Buffer
Buffer用于创建存放和处理二进制数据的缓存区,buffer是全局不需要require('buffer')
网络上发送和接收经常是以二进制传输数据:
- 通过TCP连接发送和接收数据;
- 从图像或者压缩文件读取二进制数据;
- 从文件系统读写数据;
- 处理来自网络的二进制数据流
1、字节byte: 1个字节等于8位二进制
位bit: 每位存储0或1,每8位等于一个字节,最大0-255字节
一个汉字三个字节,其它两个字节
2、Node.js 目前支持的字符编码包括:
'ascii' - 仅支持 7 位 ASCII 数据。如果设置去掉高位的话,这种编码是非常快的。
'utf8' - 多字节编码的 Unicode 字符。许多网页和其他文档格式都使用 UTF-8 。
'utf16le' - 2 或 4 个字节,小字节序编码的 Unicode 字符。支持代理对(U+10000 至 U+10FFFF)。
'ucs2' - 'utf16le' 的别名。
'base64' - Base64 编码。当从字符串创建 Buffer 时,按照 RFC4648 第 5 章的规定,这种编码也将正确地接受“URL 与文件名安全字母表”。
'latin1' - 一种把 Buffer 编码成一字节编码的字符串的方式(由 IANA 定义在 RFC1345 第 63 页,用作 Latin-1 补充块与 C0/C1 控制码)。
'binary' - 'latin1' 的别名。
'hex' - 将每个字节编码为两个十六进制字符。
new Buffer
new Buffer(size): 创建一个Buffer对象, 并返回一个数组
Buffer创建的三种类型:
1、new Buffer(2) // 创建buffer的长度
let buf = new Buffer(2);
buf[1] = '232';
buf[2] = '2312';
buf[3] = 'asasdf';
console.log('输出buffer: ', buf); // 输出buffer: <Buffer 00 e8> 只能输出两个字节
2、new Buffer(数组) // new Buffer([1,3,5])
3、new Buffer(字符串) // new Buffer('我')
字符串与buffer互转
1、字符串转buffer
let buf = new Buffer('sss')
console.log(buf); // <Buffer 73 73 73>
2、toString(编码, 获取开始位置 , 获取结束位置): buffer转换成字符串
let buf = Buffer.from('sss');
console.log(buf); // Buffer e7 be 8e e5 a5 bd 输出的6个字符
console.log(buf.length); // 6 buffer的长度
console.log('输出buffer: ', buf.toString('utf-8', 3, 6)); // 输出好
length 获取长度
let buf = new Buffer('sssss');
console.log(buf.length); // 5
concat([ 要合并的数据集合 ], 要输出的长度): 合并
let buf1 = new Buffer('忍');
let buf2 = new Buffer('者');
let buf3 = new Buffer('神');
let buf4 = new Buffer('龟');
let newBuf = Buffer.concat([buf1, buf2, buf3, buf4]);
console.log(newBuf); // 12字节
console.log(newBuf.toString()); // 输出忍者神龟
slice(start, end): 截取
let buf = new Buffer('怎么来截取buffer中的字符');
console.log(buf.slice(9, 15).toString()); // 返回 截取
copy(buffer, 开始目标位置, start, end): 拷贝
let buf = new Buffer('怎么来截取buffer中的字符');
let copyBuf = new Buffer(9);
buf.copy(copyBuf, 6, 0, 9); // 从buf的第六个字节开始,0到9字符copy
console.log(copyBuf.toString()); // 输出 来截取
Buffer.byteLength: 判断字符的长度
toString() Buffer转字符串
toString([字符编码], [开始转换位置], [结束转换位置])
let buf = new Buffer('哈哈哈');
console.log(buf.toString('utf8')); // urt8输出为 哈哈哈
可以转换成: ascii、utf8、utf16le、ucs2、base64
compare() 比较buffer
返回比较结果: 0 两个buffer相等, -1 前者小于后者, 1 前者大于后者
const bufA = new Buffer('123345');
const bufB = new Buffer('123345aaaaa');
const result = bufA.compare(bufB);
switch(result){
case -1:
console.log(`bufA 小于 bufB`);
break;
case 0:
console.log(`bufA 等于 bufB`);
break;
case 1:
console.log(`bufA 大于 bufB`);
break;
default: break;
}
fill() 用指定的值来填充Buffer
fill(val,[offset], [end], [encode]): 用指定的值来填充Buffer
Example:
let buf = new Buffer(5);
buf.fill('#');
console.log(buf);
/** 查找与搜索 */
indexOf() 返回指定字符所在Buffer的位置
let buf = new Buffer('aabbbccc');
console.log(buf.indexOf('b')); // 返回2 如果不存在返回-1
lastIndexOf() 从尾查找所在的位置
includes(val) 返回指定字符是否存在
includes(搜索的值, [buf开始搜索的位置], [搜索的编码])
Example:
let buf = new Buffer('aaabbbcccddd');
console.log(buf.includes('b', 2)); // true 或 false
keys() 把buffer中的数组下标
const buf = new Buffer('buffer');
console.log(buf)
for(const key of buf.keys()){
console.log(key); // 0、1、2、3、4、5
}
write() 将值写入到buffer的指定位置
write(string, [写入的位置], [写入的字节], [字符编码])
Buffer.isBuffer() 判断是否是Buffer
let str = '';
let buf = new Buffer(10);
console.log(Buffer.isBuffer(str)); // false
console.log(Buffer.isBuffer(buf)); // true
国内查看评论需要代理~