资讯专栏INFORMATION COLUMN

Node.js学习之路03——Buffer类初识

DobbyKim / 2020人阅读

摘要:然而,在处理流或文件流时,必须要处理二进制数据。因此,在中,定义了一个类,该类用来创建一个专门存放二进制数据的缓存区。因为在计算字符串的长度时,以位子作为一个单位,而在计算缓存区的长度时,以字节作为一个单位。

buffer对象 1. 什么是buffer
在客户端Javascript脚本代码中,对于二进制数据没有提供一个很好的支持。然而,在处理TCP流或文件流时,必须要处理二进制数据。因此,在Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。

简单来说,Buffer对象就是为了处理TCP数据流(暂且不表)和文件,比如读取一个txt文件,一张jpeg格式的图片,或者是一个word文档,都可以。

2. 创建buffer对象

直接使用new关键字来创建该类的实例对象

var buf = new Buffer()
3. Buffer类拥有三种形式的构造函数 3.1 将缓存区大小(以字节为单位)指定为构造函数的参数 3.1.1 Bufferlength属性

被创建的Buffer对象拥有一个length属性,这个属性值就是创建的Buffer对象的缓存区大小

var buf = new Buffer(100);
console.log(buf);
console.log(buf.length);

// result

100
3.1.2 初始化创建的Buffer对象

此时创建的buf对象,没有被初始化,换句话说,就是每次console.log(buf)的结果都是不一样的,但是这个buf对象的length属性是固定的100


// 再次console.log(buf),输出的结果与上面的不一样

使用Buffer对象的fill方法来初始化缓存区中的内容

buf.fill(val, [offset], [end])

第一个参数为必填的Buffer对象的填充值,填充值均以16进制计算

一般val参数的值为0

如果val参数为数值,填充的结果就是参数val

如果val参数为数组或对象,填充的结果全部为0

如果val参数为true,填充的结果全部为1

如果val参数为false,填充的结果全部为0

如果val参数为字符串,填充的结果全部为,每个字符串中的字符所对应的ascii表中的值,并且每个字符依次在length值内循环

第二个参数和第三个参数可选

offset表示为起始位置写入,默认为0

end表示将数值写入到第几个字节处,默认为length的值

3.2 直接使用一个数组来初始化缓存区
var buf = new Buffer(["a", "b", "c"]);
console.log(buf)
// result
3.3 直接使用一个字符串来初始化缓存区
var buf = new Buffer(str, [encoding])

第一个参数str为初始化缓存区的字符串,第二个参数encoding用于指定文字编码格式的字符串,默认为utf8

不同编码格式输出结果

var ascii = new Buffer("aLittleTea一点点", "ascii");
console.log("ascii  ", ascii);
// result
// ascii   

var utf8 = new Buffer("aLittleTea一点点", "utf8");
console.log("utf8   ", utf8);
// result
// utf8    

var utf16le = new Buffer("aLittleTea一点点", "utf16le");
console.log("utf16le", utf16le);
// result
// utf16le 

var ucs2 = new Buffer("aLittleTea一点点", "ucs2");
console.log("ucs2   ", ucs2);
// result
// ucs2    

var base64 = new Buffer("aLittleTea一点点", "base64");
console.log("base64 ", base64);
// result
// base64  

var binary = new Buffer("aLittleTea一点点", "binary");
console.log("binary ", binary);
// result
// binary  

var hex = new Buffer("aLittleTea", "hex");
console.log("hex    ", hex);
// result
// hex     
4. 字符串的长度与缓存区的长度
在Node.js中,一个字符串的长度与根据该字符串所创建的缓存区的长度并不相同。因为在计算字符串的长度时,以位子作为一个单位,而在计算缓存区的长度时,以字节作为一个单位。
一个汉字字符串的长度为1,但是一个汉字在Buffer缓存区中字节的长度为3,换句话说,在Node.js的Buffer类中,一个汉字的字节长度为3
var chinese = "一点点奶茶有点儿好喝";
var buf = new Buffer(chinese);
console.log(buf);
// result
// 

console.log(chinese.length);  // 10
console.log(buf.length);      // 30
console.log(chinese[4]);      // 茶
console.log(buf[4]);          // 130  注:在buf中编码为16进制,输出的结果是10进制  
// 修改chinese的某一个字符
chinese[4] = "昔";
// 字符串对象一旦被创建,就不可以被修改
console.log(chinese);         // 一点点奶茶有点儿好喝
// 修改buf的某一个字节
buf[0] = "e4";
buf[1] = "ba";
buf[2] = "8c";
console.log(buf)
// 
// 被修改的前三个字节全都是00

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92813.html

相关文章

  • Node.js学习之路04——Buffer对象与字符串

    摘要:对象与字符串对象的方法将对象中保存的数据转换为字符串第一个参数用于指定对象中保存的文字编码格式,默认参数值为第二个参数和第三个参数用于指定被转换数据的起始位置与结束位置,不包含结束位置对象的方法向已经创建的对象中写入字符串第一个参数为指定需 Buffer对象与字符串 1. Buffer对象的toString()方法 将Buffer对象中保存的数据转换为字符串 toString([e...

    dongfangyiyu 评论0 收藏0
  • 初识Node.js

    摘要:一旦替换已经完成,该模块将被完全弃用。用作错误处理事件文件,由在标准功能上的简单包装器提供所有模块都提供这些对象。 Node.js简介 Node 定义 Node.js是一个建立在Chrome v8 引擎上的javascript运行时环境 Node 特点 异步事件驱动 showImg(https://segmentfault.com/img/bVMLD1?w=600&h=237); no...

    lk20150415 评论0 收藏0
  • Node.js学习之路05——fs文件系统之文件的写入和读取

    fs文件系统 在Node.js中,提供一个fs模块,以实现文件及目录的读写操作。 1. 同步和异步方法 一般来讲,读取文件使用异步的方法,但是在读取例如系统配置文件时,应该使用同步的方法 2. 普通文件写入和读取 2.1 文件写入 2.1.1 写入一个基本的文本文件 如果不存在要写入的文件,那么将会自动创建一个文件 const fs = require(fs); let writeData = T...

    leanote 评论0 收藏0

发表评论

0条评论

DobbyKim

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<