欢迎您访问宜州一中 您可以登录 或注册
 
收藏本站 简繁转换
一方天地育桃李,三尺讲台竞风采             宜州区一中在宜州博物馆举行“人杰地灵读宜州”故事分享会             宜州一中举行2024届中考百日誓师大会             龙腾启新 筑梦未来 ——宜州区第一中学欢庆2024年元旦文艺晚会             走进嘉联丝厂 畅享研学之乐 ——宜州区第一中学开展研学实践活动             2023年河池市宜州区第一中学/宜州区红卫学校家庭经济困难大学新生入学资助项目发放名册(第二批)             展科技志向,圆飞行梦想 ——宜州区一中2025届举行无人机大赛             2023年河池市宜州区第一中学\红卫学校 家庭经济困难大学新生入学资助项目发放名册(第一批)             法制进校园 以法促成长 ——宜州一中举行“三姐护蕾”法治进校园活动             “英”你精彩,“语”你同行 —— 我校2025届举行英文风采大赛            

DoraCMS

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

文档详情

Node.js API实例讲解——Buffer的写入方法

doramart 2024-05-15 09:50:54 技术文档232518
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);    //

文章评论

取消回复
登录 参与评论

评论列表(