Buffer是全局对象,可以直接使用,不需要require('buffer')
三种使用Buffer的方式:
1.创建一个20字节大小的Buffer实例:长度一旦确定,就不能修改,与数组不同
let bf = new Buffer(20); console.log(bf.length);//20 是指字节大小,与内容无关
2.参数可以使数组:数组成员必须是整数值。
let bf = new Buffer([0x30,97,0x61,0xe5,0x89,0x8d]); console.log(bf);//console.log(bf.toString());//0aa前
数组中的数值转化为二进制存入到bf中,输出bf时,显示的是16进制,bf中的二进制表示各种数字、字母、符号和文字等,通过toString()可以显示出来
3.第一个参数是字符串,第二个参数是编码类型,默认是utf8
let bf = new Buffer('Hello'); console.log(bf);//将字符串Hello的二进制编码存入bf console.log(bf.length);//5 表示字节长度 console.log('Hello'.length);//5 表示字母的个数 console.log(bf.toString());//Hello
let str = '前端' let bf = new Buffer(str); console.log(bf);//console.log(str.length);//2 console.log(bf.length);//6表示字节长度
关于utf8中的字符的字节长度:英文字母是1字节,中文汉字是3字节
UTF-8不是固定字长编码的,而是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
‘前’字的utf8中是e5 89 8d ,e5转化成二进制11100101,前面有三个1,占3个字节
相同字符串UTF-16所占字节数最多,一个英文和一个中文汉字都是占4个字节。
Buffer实例方法:
write():它的第一个参数是所写入的内容,第二个参数(可省略)是所写入的起始位置(默认从0开始),第三个参数(可省略)是写入的长度,第四个参数是编码方式默认为utf8。功能与数组的push()方法功能相似。
var buf = new Buffer(5); buf.write('He'); buf.write('l', 2); buf.write('lo', 3); console.log(buf.toString());//Hello
slice():和数组的slice()方法相似:区别是通过buffer实例的slice()方法得到的新的对象与原来的对象存的内容指向相同,bf1修改了,bf也会发生变化。
let bf = new Buffer('Hello World!'); let bf1 = bf.slice(6,11); console.log(bf.toString());//Hello World! console.log(bf1.toString());//World
let bf = new Buffer('Hello'); let bf1 = bf.slice(0,2); console.log(bf);//console.log(bf1);// bf1[0]=20; console.log(bf);// console.log(bf1);//
copy()方法:新的对象与原有的对象不会相互影响:
let bf = new Buffer('Hello'); let bf1 = new Buffer(12); bf.copy(bf1); console.log(bf);//console.log(bf1);// bf1[0]=2; console.log(bf);// console.log(bf1);//
toJSON():
let bf = new Buffer('Hello'); console.log(bf);//console.log(bf.toJSON());//{ type: 'Buffer', data: [ 72, 101, 108, 108, 111 ] }