/**
JavaScript适合处理Unicode编码数据,但对二进制数据的处理并不友好
所以处理TCP流或文件系统时,对八位字节流的处理很有必要
Node有几个用于处理,创建和消耗八位字节流的方法
原始数据存放在一个Buffer实例中,一个Buffer类似一个整数数组,但是它的内存
分配在V8堆栈外。一个Buffer的大小是不能更改的。
处理的编码类型有:ascii,utf8,utf16le,ucs2(utf16le的别名),base64,binary,hex
Buffer为全局元素,直接new Buffer()就得到一个Buffer实例
*/
//new Buffer(size)得到一个4字节的buffer(缓存)
var buffer1 = new Buffer(4);
//new Buffer(array) 得到一个字节数组的buffer
var buffer2 = new Buffer([]);
//new Buffer(str[, encoding])得到一个给定字符串,或编码的buffer
var buffer3 = new Buffer('node.js');
//buf.write(string[, offset][, length][, encoding]);返回string的长度length
//buf,write(写到buffer的字符串,开始写的地方,写的长度,编码)
len = buffer1.write('\u00bd+\u00bc=\u00be',0);
//buffer1只有4个字节大,'\u00bd+\u00bc'大于4,'\u00bd+’小于4,只输出'\u00bd+‘大小为3
console.log(len + 'bytes:' + buffer1.toString('utf8',0,len));
//buf.toString([encoding, ][start][,end]);
//buf.toString(编码,起始位置,结束位置)
//buf[index] 一个buffer相似数组也有index,0=<index<=255
var str = 'node.js';
var buffer4 = new Buffer(str.length);
for(var i=0;i<str.length;i++){
buffer4[i] = str.charCodeAt(i); //将str中的字符的unicode编码数据给buffer
}
console.log(buffer4)
//Buffer.isBuffer(obj) 判断obj是否为一个Buffer
console.log(Buffer.isBuffer(str)) //false,str为字符串
console.log(Buffer.isBuffer(buffer4)) //true
//Buffer.byteLength(string[, encoding]) 得到string的大小(字节为单位)
str = '\u00bd+\u00bc=\u00be';
console.log(str +":"+ str.length +" characters,"+Buffer.byteLength(str,'utf8')+" bytes.");
//Buffer.concat(list[,totalLength])将多个buffer合并
//list为buffer数组,totalLength为合并buffer的个数
var newbuf = Buffer.concat([buffer1,buffer4])
console.log(newbuf)
//buf.length 得到一个buffer的长度
console.log(buffer1.length);
buffer1.write("some string",0,'ascii')
console.log(buffer1.length);
//buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
//buf.copy(复制目标,开始插入位置,复制开始位置,复制结束位置)
var buffer5 = new Buffer(26);
var buffer6 = new Buffer(26);
for(var i=0;i<26;i++){
buffer5[i] = i+97;
buffer6[i] = 33;
}
buffer5.copy(buffer6,8,16,20)
console.log(buffer6.toString('ascii'))
//buf.slice([start][, end]) 将buf进行分割,得到一个新的buffer
console.log(buffer5.toString('ascii'));
var sliceBuf = buffer5.slice(3,9);
console.log(sliceBuf.toString('ascii'))
JavaScript适合处理Unicode编码数据,但对二进制数据的处理并不友好
所以处理TCP流或文件系统时,对八位字节流的处理很有必要
Node有几个用于处理,创建和消耗八位字节流的方法
原始数据存放在一个Buffer实例中,一个Buffer类似一个整数数组,但是它的内存
分配在V8堆栈外。一个Buffer的大小是不能更改的。
处理的编码类型有:ascii,utf8,utf16le,ucs2(utf16le的别名),base64,binary,hex
Buffer为全局元素,直接new Buffer()就得到一个Buffer实例
*/
//new Buffer(size)得到一个4字节的buffer(缓存)
var buffer1 = new Buffer(4);
//new Buffer(array) 得到一个字节数组的buffer
var buffer2 = new Buffer([]);
//new Buffer(str[, encoding])得到一个给定字符串,或编码的buffer
var buffer3 = new Buffer('node.js');
//buf.write(string[, offset][, length][, encoding]);返回string的长度length
//buf,write(写到buffer的字符串,开始写的地方,写的长度,编码)
len = buffer1.write('\u00bd+\u00bc=\u00be',0);
//buffer1只有4个字节大,'\u00bd+\u00bc'大于4,'\u00bd+’小于4,只输出'\u00bd+‘大小为3
console.log(len + 'bytes:' + buffer1.toString('utf8',0,len));
//buf.toString([encoding, ][start][,end]);
//buf.toString(编码,起始位置,结束位置)
//buf[index] 一个buffer相似数组也有index,0=<index<=255
var str = 'node.js';
var buffer4 = new Buffer(str.length);
for(var i=0;i<str.length;i++){
buffer4[i] = str.charCodeAt(i); //将str中的字符的unicode编码数据给buffer
}
console.log(buffer4)
//Buffer.isBuffer(obj) 判断obj是否为一个Buffer
console.log(Buffer.isBuffer(str)) //false,str为字符串
console.log(Buffer.isBuffer(buffer4)) //true
//Buffer.byteLength(string[, encoding]) 得到string的大小(字节为单位)
str = '\u00bd+\u00bc=\u00be';
console.log(str +":"+ str.length +" characters,"+Buffer.byteLength(str,'utf8')+" bytes.");
//Buffer.concat(list[,totalLength])将多个buffer合并
//list为buffer数组,totalLength为合并buffer的个数
var newbuf = Buffer.concat([buffer1,buffer4])
console.log(newbuf)
//buf.length 得到一个buffer的长度
console.log(buffer1.length);
buffer1.write("some string",0,'ascii')
console.log(buffer1.length);
//buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
//buf.copy(复制目标,开始插入位置,复制开始位置,复制结束位置)
var buffer5 = new Buffer(26);
var buffer6 = new Buffer(26);
for(var i=0;i<26;i++){
buffer5[i] = i+97;
buffer6[i] = 33;
}
buffer5.copy(buffer6,8,16,20)
console.log(buffer6.toString('ascii'))
//buf.slice([start][, end]) 将buf进行分割,得到一个新的buffer
console.log(buffer5.toString('ascii'));
var sliceBuf = buffer5.slice(3,9);
console.log(sliceBuf.toString('ascii'))