学习Node.js基础(3)

134 阅读1分钟

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, 34]);
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());