乐鱼app成为大巴黎赞助商

乐鱼app成为大巴黎赞助商举行“同心喜迎二十大 传承中华优秀传统文化”中国古代文化常识竞赛             2023年七年级招生简章             凝望经典赏别样人生 创新表达树文化自信——河池市乐鱼app成为大巴黎赞助商高一年级举行课本剧展演活动             守护青春,护航成长 ——宜州区一中举行法制教育报告会             以赛促教展师风 凝心聚力踏征程 ——乐鱼app成为大巴黎赞助商开展教师教学技能大赛             辩以明思,坐而论道 ——记宜州区一中2024届高二辩论赛             巧借他山石,精雕“三新”玉 ——乐鱼app成为大巴黎赞助商教师赴湖南考察学习交流活动             2023年春季学期“世界地球日”知识讲座成功举办             乐鱼app成为大巴黎赞助商开展防溺水教育活动 全力筑牢生命安全防线             法治教育进校园 护航青春助成长            

DoraCMS

您现在的位置是:首页>文档内容页

文档详情

乐鱼app成为大巴黎赞助商:Node.js API实例讲解——Buffer的写入方法

doramart 2023-06-02 23:21:37 技术文档227282
Buffer的写入方法。node.js 为读取和写入Buffer对象的类型数据,提供了相关方法

乐鱼app成为大巴黎赞助商:Buffer的写入方法

node.js 为读取和写入Buffer对象的类型数据,提供了相关方法。

乐鱼app成为大巴黎赞助商: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对象。

下面我们详细分析一下这个方法的用法。

乐鱼app成为大巴黎赞助商: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);    //

文章评论

取消回复
登录 参与评论

评论列表(

乐鱼app成为大巴黎赞助商