本文发表于本人博客。
上一节笔记说到创建Buffer实例,这节继续讲Buffer。本节讲解下Buffer的一些静态方法、写入以及读取方法。
Buffer.isEncoding(编码)判断nodejs是否支持此编码
console.log(Buffer.isEncoding("gb2312"));//不管过程怎么node都不支持这个编码,死记 console.log(Buffer.isEncoding("utf8")); //true console.log(Buffer,isEncoding("ascii")); //true
Buffer.isBuffer(obj) 判断obj对象是否是Buffer类型对象
var str = ""; var obj = new Buffer(100); console.log(Buffer.isBuffer(str)); //false console.log(Buffer.isBuffer(obj)); //true
Buffer.byteLength(string,[encoding]) 获得指定编码(默认UTF8)下指定字符串所占的byte。注意utf8于ucs2不同
var str = "独孤求败"; var buf = new Buffer(str); console.log(Buffer.byteLength(str,"utf8")); //12 console.log(Buffer.byteLength(str)); //12 console.log(Buffer.byteLength("abc")); //3 console.log(Buffer.byteLength(str,"ucs2")); //8
Buffer的写入方法:writeXXX(value,offset,[noAssert])
value:必须是整形或浮点;
offset:写入的开始位置;
noAssert:超出范围包异常,可省略;
有如下方法:writeInt8(),writeInt16BE(),writeIntLE(),writeInt32LE(),writeInt32BE().注意writeInt8()只有这个而且是从默认是LE模式
var buf = new Buffer(4); var data = 0x0c;//十六进制=12 buf.fill(); //使用fill方法填充,差不多就是全部清零状态 buf.writeInt8(data,0); console.log(buf); //0c 00 00 00 buf.fill(); buf.writeInt16LE(data,0);//使用16位有符号 低到高存储 console.log(buf); //0c 00 00 00 buf.fill(); buf.writeInt16BE(data,0);//使用16位有符号 高到低存储 console.log(buf); //00 0c 00 00
Buffer的读取方法readUInt8(offset,[noAssert]) 这个跟write是一一对应的!
var buf = new Buffer(4); var data = 0x0c; buf.fill(); buf.writeInt8(data,0); console.log(buf.readInt8(0)); //12 buf.fill(); buf.writeInt16LE(data,0); console.log(buf.readInt16LE(0)); //12
copy(targetBuffer,[targetStart],[sourceStart],[sourceEnd]) 从一个Buffer对象拷贝指定的位置到目标Buffer
var sBuffer = new Buffer("独孤求败"); var tBuffer1 = new Buffer(6); var tBuffer2 = new Buffer(9); sBuffer.copy(tBuffer1); sBuffer.copy(tBuffer2); console.log(tBuffer1.toString()); //独孤 console.log(tBuffer2.toString()); //独孤求
大家看到上面没,跟再上面的一段对比,就知道默认utf输出是3个字节一个中文哦!所以打印sBuffer的字节数是12.大家可以尝试下使用编码ascii输出是多少,什么条件下是不能输出的!
这节课先到这里,感觉最近又没时间了,慢慢,坚持下去。