Buffer
JavaScript只有字符串数据类型,没有二进制数据类型,但是在处理文件流时(也就是读写操作),必须使用二进制数据。因此Nodejs为了处理这种情况,定义了一个Buffer对象类,用来创建一个专门存放二进制数据的缓存区。简而言之,Buffer就是类似一个整数数组。
创建Buffer对象
- Buffer.from(array):根据一个数组内容创建Buffer对象;
- Buffer.from(string[, encoding]):根据一个字符串内容创建Buffer对象,可以通过
encoding参数设置字符编码,默认utf8; - Buffer.alloc(size):创建一个指定长度的Buffer对象。
let buf1 = Buffer.from([1, 2, 3, 4]);
let buf2 = Buffer.from('regis');
let buf3 = Buffer.alloc(10);
console.log(buf1); //<Buffer 01 02 03 04>
console.log(buf2); //<Buffer 72 65 67 69 73>
console.log(buf3); //<Buffer 00 00 00 00 00 00 00 00 00 00>
Buffer属性
length:返回为Buffer对象分配的内存量(以字节为单位)。 需要注意的是,这不一定反映Buffer“可用”数据的数量。虽然length属性不是不可变的。若想修改Buffer长度,应将length视为只读,并使用slice()创建一个新的Buffer。
let buf = Buffer.alloc(10);
console.log(buf.length); // 10
buf.write('lony'); // 写入数据
console.log(buf.length); // 10
Buffer类方法
- Buffer.isEncoding(encoding):判断是否支持该编码
encoding; - Buffer.isBuffer(obj):判断对象
obj是否为Buffer对象; - Buffer.byteLength(str[, encoding]):返回某字符串
str的指定编码encoding的字节长度,默认utf8; - Buffer.concat(list[, totalLength]):将一组
Buffer对象list合并为一个Buffer对象。
console.log(Buffer.isEncoding('utf8'));
let buf1 = Buffer.from('regis');
console.log(Buffer.isBuffer(buf1));
console.log(Buffer.byteLength('TEST', 'utf8'));
let buf2 = Buffer.from('lony');
let concatBuf = Buffer.concat([buf1, buf2]);
console.log(concatBuf);
Buffer对象方法
- buf.write(string):向
Buffer对象中写入内容string,并返回写入字节数量; - buf.slice([start[, end]]):截取
Buffer对象,返回新的Buffer对象,start默认是 0,end默认是buf.length; - buf.toString():把
Buffer对象转成字符串 - buf.toJSON(): 把
Buffer对象转成JSON格式的对象
let buf = Buffer.alloc(128);
let len = buf.write("www.wolfcode.cn");
console.log("写入字节数 : " + len);
let buf = Buffer.from('wolfcode').slice(0, 2);
console.log(buf.toString());