nodejs怎么存取2进制数据? - 网站

nodejs怎么存取2进制数据?

分类:Node.js常见问题 · 发布时间:2019-08-05 10:40 · 阅读:1246

在客户端javascript脚本代码中,对于二进制数据并没有提供一个很好的支持。然后在nodejs中需要处理像TCP流或文件流时,必须要处理二进制数据。因此在node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。

在Node.js中,Buffer类是一个可以在任何模块中被利用的全局类,不需要为该类的使用而加载任何模块.我们可以使用new关键字来创建该类的实例对象.Buffer类拥有三种形式的构造函数.

nodejs存取2进制数据的方法如下:

1、只需要将缓冲区大小(以字节为单位)指定为构造函数的参数.

new Buffer(size)

被创建的Buffer对象拥有一个length属性,属性值为缓冲区的大小.
打开终端输入一些命令来创建Buffer对象并查看缓冲区的大小,输入命令可以看到结果.

dingweijun@dingweijun-ThinkPad-Edge-E430c:~$ node
> buf = new Buffer(100);
<Buffer b8 ee 3e 8b 0a 7f 00 00 c0 a5 cb 01 00 00 00 00 c0 a5 cb 01 00 00 00 00 0a 00 
00 00 00 00 00 00 48 a6 cb 01 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 ...>
>

2、构造函数可以直接使用一个数组来初始化缓冲区.

new    Buffer(array)

在这种形式构造函数中,他使用一个存放了需要被指定数值的数组来作为构造函数的参数.

打开终端输入一些命令以使用数组创建Buffer对象.

dingweijun@dingweijun-ThinkPad-Edge-E430c:~$ node
> buf = new Buffer([0,1,2]);
<Buffer 00 01 02>
>

3、构造函数是直接使用一个字符串来初始化缓冲区.

new Buffer(str,[encoding])

在这种形式的构造函数中,使用两个参数,其中第一个参数是必须要指定的参数,参数值为用于初始化缓冲区的字符串,第二个参数为一个用于指定文字编码格式的字符串,默认值为"utf-8".

打开终端输入一些命令以使用字符串参数创建Buffer对象.

dingweijun@dingweijun-ThinkPad-Edge-E430c:~$ node
> buf = new Buffer('我喜欢编程')
<Buffer e6 88 91 e5 96 9c e6 ac a2 e7 bc 96 e7 a8 8b>
>

字符串的长度与缓冲区的长度

在Node.js中,一个字符串的长度与根据该字符串所创建的缓冲区的长度并不相同,因为计算字符串的长度时,以字节作为一个单位,而在计算缓冲区的长度时,以字节数作为一个单位.

我们来做个实例,针对"我喜欢编程"这个字符串,该字符串对象的length属性值与根据该字符串创建的Buffer对象的length属性值并不相同,因为字符串对象的length属性获取的是文字个数,而Buffer对象的length属性值获取的是缓冲区的长度,也就是缓冲区的字节数. 打开终端输入一些命令来创建一个字符串,然后使用该字符串创建一个Buffer对象,然后在控制台中输出字符串长度与缓冲区的长度.

dingweijun@dingweijun-ThinkPad-Edge-E430c:~$ node
> str = '我喜欢编程''我喜欢编程'
> buf = new Buffer(str);
<Buffer e6 88 91 e5 96 9c e6 ac a2 e7 bc 96 e7 a8 8b>
> str.length;
5
> buf.length;
15
>

附加点知识,可以使用以0开始的序号去取字符串对象或缓冲区中的数据,但是,在获取数据时,字符串对象也是以字节作为一个单位,而缓冲区对象(Buffer对象)以字节作为一个单位,假设,针对一个引用了字符串对象的str变量来说,str[2]获取的第三个文字,而针对一个引用缓冲区对象的buf变量来说,buf[2]获取的是缓冲区中第三个字节数据转换为整数后的数值. 打开终端输入一些命令以使用"我喜欢编程"创建一个字符串与一个Buffer对象并在控制台中输出字符串中第三个文字和缓冲区中第三个直接数据.

dingweijun@dingweijun-ThinkPad-Edge-E430c:~$ node
> str = "我喜欢编程"'我喜欢编程'
> buf = new Buffer(str)
<Buffer e6 88 91 e5 96 9c e6 ac a2 e7 bc 96 e7 a8 8b>
> str = '我喜欢编程'
 '我喜欢编程'
> str [2];
'欢'
> buf [2];
145
>

还有一点就是,字符串对象一旦创建之后就不能在修改 打开终端输入一些命令以使用"我喜欢编程"创建一个字符串对象并对它进行修改,然后在控制台输出结果.

dingweijun@dingweijun-ThinkPad-Edge-E430c:~$ node
> str = '我喜欢编程'
'我喜欢编程
'> str [2] = '囍'
'囍'
> str;'我喜欢编程'
>


而Buffer对象是可以被修改的.可以通过序号来修改其中某个字节处的数据.

dingweijun@dingweijun-ThinkPad-Edge-E430c:~$ node
> buf = new Buffer('我喜欢编程')
<Buffer e6 88 91 e5 96 9c e6 ac a2 e7 bc 96 e7 a8 8b>
> buf [2] =0;0
> buf;<Buffer e6 88 00 e5 96 9c e6 ac a2 e7 bc 96 e7 a8 8b>
>

Buffer有一个用于取出指定位置处数据的slice方法,该方法的使用跟string对象的slice方法相同.

dingweijun@dingweijun-ThinkPad-Edge-E430c:~$ node
> str = '我喜欢编程'
'我喜欢编程'
>buf = new Buffer(str);
<Buffer e6 88 91 e5 96 9c e6 ac a2 e7 bc 96 e7 a8 8b>
> str.slice(2,4);
'欢编'
> buf.slice(2,4);
<Buffer 91 e5>
>


标签:
nodejs

相关文章

如何设置 nodejs 的环境变量

在前端开发过程中,我们需要对 application 运行的环境进行设置,一般会包括开发环境development,生产环境production,每个环境可以对应不同的一些配置,例如不同环境下请求的地址...

谈谈Node.js与JavaScript的差异

Javascript是一种web前端语言,主要用于web开发中,由浏览器解析执行。Node.js是一个可以快速构建网络服务及应用的平台,是用Javascript语言构建的服务平台。

npm install安装报错怎么解决?

解决方法:1、报“operation not permitted”错误,通过“npm i 包名 --no-optional”解决;2、报“Missing: chromedriver”错误,表示没有安装chromedriver,安装一下即可。

怎么使用npm下载vue.js?

使用npm下载vue.js的方法:1、安装node.js和npm;2、安装cnpm;3、使用命令cnpm install -g vue-cli来安装即可。

vue.js和node.js是什么关系?

vue.js和node.js并没有关系,vue.js是前端框架,算是js的三大框架之一吧,node.js是后端开发语言,同php、java、c#一样的。但是他们可以配合使用。

返回分类 返回首页