Buffer
对象与字符串
1. Buffer
对象的toString()
要领
- 将
Buffer
对象中保留的数据转换为字符串 toString([encoding], [start], [end])
- 第一个参数用于指定
Buffer
对象中保留的笔墨编码花样,默许参数值为utf8
- 第二个参数和第三个参数用于指定被转换数据的肇端位置与完毕位置,不包含完毕位置
var buf = new Buffer('BUFFER OBJECT');
console.log(buf);
console.log(buf.toString());
console.log(buf.toString('utf8', 2, 5));
// result
<Buffer 42 55 46 46 45 52 20 4f 42 4a 45 43 54>
BUFFER OBJECT
FFE
2. Buffer
对象的write()
要领
- 向已建立的
Buffer
对象中写入字符串 buf.write(string, [offset], [length], [encoding])
- 第一个参数为指定须要写入的字符串
- 第二个参数和第三个参数用于指定字符串转换为字节数据后的写入位置(包含肇端值和完毕值)
- 第四个参数为编码花样,默许为
utf8
花样
var chinese = '一点点奶茶有点儿好喝';
var buf = new Buffer(chinese);
buf.write('二', 0, 3, 'utf8');
console.log(buf.toString());
// 二点点奶茶有点儿好喝
在这个
0
到
3
区间内,实质上对应的是
chinese
字符串内的
一
这个字,假如把
3
改成
6
,获得的效果依然是
二点点奶茶有点儿好喝
,由于请求的空间大于所写入的空间,所以效果稳定。假如把
buf.write('二', 0, 3, 'utf8')
中的
二
改成
二二
,一样给
0
到
3
区间,效果依然是
二点点奶茶有点儿好喝
,然则假如区间为
0
到
6
,那末效果就是
二二点奶茶有点儿好喝
,假如把
buf.write('二', 0, 3, 'utf8')
改成
buf.write('二二点奶茶不是适口可乐', 0, 30, 'utf8')
,那末效果是
二二点奶茶不是适口可
,获得的
buf
的长度依然是
30
所以,也就是说,
buf
的write
要领,只是把原buf
的内容剪切掉,新内容假如恰好能放下,那末新内容将旧内容替代,假如不能恰好放下,那末重新内容的肇端位置最先盘算,能放若干就放若干,过剩的部份舍去,不够的部份,将不替代旧内容。说白了,就是
buf
字节长度所对应的内容的替代。
3. StringDecoder
对象
运用
StringDecoder
对象将
Buffer
对象中的数据转换为字符串,该对象的作用与
Buffer
对象的
toString
要领的作用雷同,然则关于
utf8
编码花样的字符串供应更好的支撑
var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');
var buf = new Buffer('新垣结衣が主役の映画');
console.log(decoder.write(buf));
// result
// 新垣结衣が主役の映画
4. Buffer
对象与JSON
对象的相互转换
-
JSON.stringify(buf)
将Buffer
对象中保留的数据转换为一个字符串
var buf = new Buffer('一点点奶茶有点儿好喝');
console.log(buf);
// <Buffer e4 b8 80 e7 82 b9 e7 82 b9 e5 a5 b6 e8 8c b6 e6 9c 89 e7 82 b9 e5 84 bf e5 a5 bd e5 96 9d>
var jsonBuffer = JSON.stringify(buf);
console.log(jsonBuffer);
{
"type": "Buffer",
"data": [228,184,128,231,130,185,231,130,185,229,165,182,232,140,182,230,156,137,231,130,185,229,132,191,229,165,189,229,150,157]
}
var data = [228,184,128,231,130,185,231,130,185,229,165,182,232,140,182,230,156,137,231,130,185,229,132,191,229,165,189,229,150,157];
var newData = []
data.forEach(function(elem){
newData.push(elem.toString(16))
})
console.log(newData)
// ['e4','b8','80','e7','82','b9','e7','82','b9','e5','a5','b6','e8','8c','b6','e6','9c','89','e7','82','b9','e5','84','bf','e5','a5','bd','e5','96','9d']
- 能够发明,对
Buffer
对象举行JSON.stringify()
以后,获得的对象的data
属性的属性值,转换成16进制
以后,就是该Buffer
对象的字节值
5. 复制缓存数据
buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])
- 第一个参数用于指定复制的目的
Buffer
对象 - 第二个参数用于指定目的
Buffer
对象中从第几个字节最先写入数据,默许值是0
- 第三个参数用于指定复制源
Buffer
对象中猎取数据时的最先位置,默许值是0
- 第四个参数用于指定从复制源
Buffer
对象中猎取数据时的完毕位置,默许值是复制源Buffer
对象的长度
var buf1 = new Buffer('新垣结衣が主役の映画「ミックス」が中国で公开へ');
console.log(buf1);
var buf2 = Buffer(256).fill(0);
console.log(buf2);
buf1.copy(buf2, 10, 12, 30);
console.log(buf2.toString());
/***
* <Buffer e6 96 b0 e5 9e a3 e7 b5 90 e8 a1 a3 e3 81 8c e4 b8 bb e5 bd b9 e3 81 ae e6 98 a0 e7 94 bb e3 80 8c e3 83 9f e3 83 83 e3 82 af e3 82 b9 e3 80 8d e3 81 ... >
* <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... >
* が主役の映画
***/
buf1
有值,buf2
想要复制buf1
的值,那末就是buf1.copy(buf2, <buf2要被粘贴的肇端位置>, <buf1要被复制的肇端位置>, <buf1要被复制的完毕位置>)
6. Buffer
类的类要领
6.1 isBuffer
要领
Buffer.isBuffer(buf)
- 推断一个对象是不是为一个
Buffer
对象,返回效果为true
或许false
6.2 byteLength
要领
Buffer.byteLength(string, [encoding])
- 在差别的编码花样下,统一个字符的字节长度是不一样的
var japanese = '新垣结衣';
console.log(Buffer.byteLength(japanese, 'utf8')); //12
console.log(Buffer.byteLength(japanese, 'utf16le'));//8
console.log(Buffer.byteLength(japanese, 'base64')); //3
console.log(Buffer.byteLength(japanese, 'hex')); //2
console.log(Buffer.byteLength(japanese, 'ascii')); //4
6.3. concat
要领,拼接Buffer
对象的值
- 与字符串和数组的
concat
要领运用雷同
var buf1 = new Buffer('新垣结衣が主役の映画');
var buf2 = new Buffer('「ミックス」');
var buf3 = new Buffer('が中国で公开へ');
console.log(Buffer.concat([buf1, buf2, buf3]).toString());
// result
// 新垣结衣が主役の映画「ミックス」が中国で公开へ
6.4. isEncoding
要领
Buffer.isEncoding(encoding)
- 检测一个字符串是不是为一个有用的编码花样字符串
var code = 'utf8';
console.log(Buffer.isEncoding(code));