Node.js API实例讲解——Buffer的写入方法
Buffer的写入方法。node.js 为读取和写入Buffer对象的类型数据,提供了相关方法
Buffer的写入方法
node.js 为读取和写入Buffer对象的类型数据,提供了相关方法。
buf.writeXXX(value, offset, [noAssert]);
value 参数,要写入的值,这个值必须是整数或浮点数,不可省略 offset 参数,写入的起始位置,不可省略。 noAssert[可选]参数, 默认false当超出buf的范围时会抛出异常, 设置true超出buf范围不会抛出异常,写入范围内的byte,丢弃超出的部分。
node.js 读取和写入数据,支持的类型有: Int8八位有符号整数、UInt8八位无符号整数、Int16LE/Int16BE十六位有符号整数、UInt16LE/UInt16BE十六位无符号整数、UInt32LE/UInt32BE三十二位无符号整数、Int32LE/Int32BE三十二位有符号整数、FloatLE/FloatBE三十二位单精度浮点数、DoubleLE/DoubleBE六十四位双精度浮点数。
首先我们通过写入一个整数,对比这几种数据结构。
例1
var buf = new Buffer(4), num = 0x0c; // 0x0c是整数12的十六进制形式 buf.fill(); // 清空 buf.writeInt8(num,0); console.log(buf); //buf.fill(); buf.writeUInt8(num,0); console.log(buf); //buf.fill(); buf.writeInt16BE(num,0); console.log(buf); //buf.fill(); buf.writeUInt16BE(num,0); console.log(buf); //buf.fill(); buf.writeInt16LE(num,0); console.log(buf); //buf.fill(); buf.writeUInt16LE(num,0); console.log(buf); //buf.fill(); buf.writeInt32BE(num,0); console.log(buf); //buf.fill(); buf.writeUInt32BE(num,0); console.log(buf); //buf.fill(); buf.writeInt32LE(num,0); console.log(buf); //buf.fill(); buf.writeUInt32LE(num,0); console.log(buf); //buf.fill();
通过这个例子说明,LE 和 BE的区别是数据结构的排列顺序正好颠倒,例如Int16BE用<00 0c="">结构储存12,Int16LE用<0c 00="">结构储存。UIntXXX表示无符号IntXXX表示有符号。另外,我们温习一下,八位占用1个byte,16位占用2个byte,32位占用4个byte,64占用8个byte,位数的由来是因为一个byte有8个bit。位数越高表达的数的范围就越大。
浮点和整数大同小异,例:
var buf = new Buffer(8), num = 210.567; buf.fill(); buf.writeFloatBE(num,0); console.log(buf); //buf.fill(); buf.writeFloatLE(num,0); console.log(buf); //buf.fill(); buf.writeDoubleBE(num,0); console.log(buf); //buf.fill(); buf.writeDoubleLE(num,0); console.log(buf); //buf.fill
还有一个buf.fill方法,用来填充Buffer对象的,但这个方法并不是表面理解的那样。god
fuck前面用到了不带参数的fill方法,可以清空整个Buffer对象。
下面我们详细分析一下这个方法的用法。
buf.fill(value, [offset], [end])
value 参数,表示填充值 [但这里要注意:fill内部只会用值数据的第一个byte进行填充] offset[可选]参数,填充的开始位置,默认0,如果超出buf范围会抛出异常。 end[可选]参数,填充的结束位置,默认buf.length,如果超出buf范围会抛出异常。
例1
var buf = new Buffer(4); buf.fill(); // 清空 console.log(buf); //var value = new Buffer("你好","utf16le"); console.log(value);//buf.fill("你好"); // 填充整个buf console.log(buf); //
这个例子我们看到“你好”占用的第一个字节 0x60 填充了整个buf,之所以采用utf16le,因为这是fill方法内部的默认编码。
例2
var buf = new Buffer(4); buf.fill(0); buf.fill("你好",2); // 填充buf的3~4的byte console.log(buf); //buf.fill(0); buf.fill("你好",2,3);// 填充buf的第三个byte console.log(buf); //
很赞哦! ( 0
)
相关文章
- DoraCMS系统操作指南(二)
- DoraCMS广告模块优化
- 第10天 cookie与session—开发总结
- Express 4.8.x—koajs框架快速掌握
- 第10天 cookie与session—实例演示
- 第10天 cookie与session— session插件开发
- 第10天 cookie与session— session插件分析
- 第9天response 响应渲染 —动态渲染实例
- 第9天response 响应渲染 —动态渲染插件开发
- 第9天response 响应渲染 —动态渲染插件分析
- 第9天response 响应渲染 —download插件开发
- 第9天response 响应渲染 —跳转插件开发