node.js中的全局对象Buffer

来源:互联网 发布:淘宝信誉评价表 编辑:程序博客网 时间:2024/05/16 20:03

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);//<Buffer 30 61 61 e5 89 8d>console.log(bf.toString());//0aa前
数组中的数值转化为二进制存入到bf中,输出bf时,显示的是16进制,bf中的二进制表示各种数字、字母、符号和文字等,通过toString()可以显示出来
3.第一个参数是字符串,第二个参数是编码类型,默认是utf8
let bf = new Buffer('Hello');console.log(bf);//<Buffer 48 65 6c 6c 6f>将字符串Hello的二进制编码存入bfconsole.log(bf.length);//5 表示字节长度console.log('Hello'.length);//5 表示字母的个数console.log(bf.toString());//Hello
let str = '前端'let bf = new Buffer(str);console.log(bf);//<Buffer e5 89 8d e7 ab af>console.log(str.length);//2console.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);//<Buffer 48 65 6c 6c 6f>console.log(bf1);//<Buffer 48 65>bf1[0]=20;console.log(bf);//<Buffer 14 65 6c 6c 6f>console.log(bf1);//<Buffer 14 65>
copy()方法:新的对象与原有的对象不会相互影响:

let bf = new Buffer('Hello');let bf1 = new Buffer(12);bf.copy(bf1);console.log(bf);//<Buffer 48 65 6c 6c 6f>console.log(bf1);//<Buffer 48 65 6c 6c 6f 00 00 00 18 36 57 00>bf1[0]=2;console.log(bf);//<Buffer 48 65 6c 6c 6f>console.log(bf1);//<Buffer 02 65 6c 6c 6f 00 00 00 18 36 57 00>
toJSON():
let bf = new Buffer('Hello');console.log(bf);//<Buffer 48 65 6c 6c 6f>console.log(bf.toJSON());//{ type: 'Buffer', data: [ 72, 101, 108, 108, 111 ] }

Buffer中的类方法:

Buffer.isBuffer():判断对象是不是Buffer对象

let bf = new Buffer('Hello');console.log(Buffer.isBuffer(bf));//true
Buffer.isEncoding():表示Buffer实例支持的编码
console.log(Buffer.isEncoding('utf8'));//true
Buffer.byteLength():表示字符串的字节长度,第二个参数表示编码类型,默认是utf8
console.log(Buffer.byteLength('前端'));//6
Buffer.concat():第一个参数是一个数组,数组元素是Buffer对象,第二个参数表示生对象的字节长度,可省略
let bf1 = new Buffer('Hello');let bf2 = new Buffer(' ');let bf3 = new Buffer('World');let bf4 = Buffer.concat([bf1,bf2,bf3]);console.log(bf4);//<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64>console.log(bf4.toString());//Hello World





原创粉丝点击