nodeJS中buffer简单介绍
--
JavaScript 语言没有二进制数据类型。
什么是buffer:
中文翻译:缓冲区;是指输入输出数据的一段内存。
1. 定义Buffer
方式一:通过长度定义
const buffer = Buffer.alloc(10);
const buffer2 = Buffer.allocUnsafe(10);
创建长度为10且为初始化的buffer
Buffer.alloc()方法与Buffer.allocUnsafe()的区别是什么?
在生成buffer的过程中需要两步走
1、申请内存空间
2、申请的内存空间进行填充
但是 Buffer.allocUnsafe()
只完成了第一步,没有完成第二步,所以会速度会比Buffer.alloc()
快,但是会存在问题,就是申请的空间可能“残留了”以前内存上的数据。我们称为敏感数据。
let buffer = Buffer.alloc(10); // <Buffer 00 00 00 00 00 00 00 00 00 00> let buffer2 = Buffer.allocUnsafe(10); // <Buffer 00 00 00 00 00 00 00 00 08 a4>
非00的即为敏感数据。
Buffer.alloc()
完成了两步,在第二步把所有的旧数据清除掉,填充成0。
所以一般为了避免不可描述的漏洞产生,不建议使用Buffer.allocUnsafe()
.
方式二:字符串创建
const buffer = Buffer.from('tom') // <Buffer 74 6f 6d>
方式三:数组创建
const buffer = Buffer.from([1,2,3]) // <Buffer 01 02 03>
2. buffer常用方法
(1)buffer.fill()
用来填充buffer的内容
const buffer = Buffer.alloc(5) buffer.fill(2) console.log(buffer); // <Buffer 02 02 02 02 02>
(2)buffer.write()
用来向buffer中写入指定内容
const buffer = Buffer.alloc(10) buffer.write('tom', 0, 4, 'utf-8'); console.log(buffer); // <Buffer 74 6f 6d 00 00 00 00 00 00 00> console.log(buffer.toString('utf-8')); // tom
(3)buffer.toString()
将buffer转化为其他编码
const buffer = Buffer.from('tom') console.log(buffer); // <Buffer 74 6f 6d> console.log(buffer.toString()); // tom
(4)buffer.slice()
截取buffer 不会改变原buffer返回一个新buffer
let buffer = Buffer.from('tom'); let sliceBuffer = buffer.slice(0,2); console.log(buffer, sliceBuffer); // <Buffer 74 6f 6d> <Buffer 74 6f>
(5)buffer.copy() 将其他buffer拷贝到一个buffer上 参数 [source, targetStart, sourceStart, sourceEnd]
let buffer = Buffer.alloc(6); let buffer1 = Buffer.from('tom'); let buffer2 = Buffer.from('jack'); buffer1.copy(buffer, 0, 0, 2); buffer2.copy(buffer, 2, 0, 4) console.log(buffer, buffer.toString('utf-8')); // <Buffer 74 6f 6a 61 63 6b> tojack
(6)Buffer.concat()
拼接buffer,注意此方法是在Buffer上的。
let buffer1 = Buffer.from('tom'); let buffer2 = Buffer.from('jack'); let buffer3 = Buffer.concat([buffer1, buffer2]); console.log(buffer3, buffer3.toString('utf-8')); // <Buffer 74 6f 6d 6a 61 63 6b> tomjack
(7)Buffer.isBuffer()
判断是否是Buffer
let buffer = Buffer.from('tom'); console.log(Buffer.isBuffer(buffer)); // true
(8)buffer.length
buffer的长度
let buffer = Buffer.from('tom'); console.log(buffer.length); // 3
--