Node.js处理数据IO

Posted diuxie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js处理数据IO相关的知识,希望对你有一定的参考价值。

javascript中,对于字符串的操作已经十分便捷,不存在二进制数据类型,这些对字符串的简单操作和DOM操作基本上已经可以满足前端的需求了,但是Node.js中提供了处理文件和I/O的功能,因此需要处理大量的二进制数据。而在Node.js中Buffer和Stream文件流对二进制数据的处理提供了很好的支持

Buffer缓存区

Buffer类是随着Node.js内核一起发布的核心库,用于支持I/O操作中移动的数据处理。Buffer类为Node.js提供了一种存储原始数据的方法,该方法用来在内存中创建一个专门存放二进制数据的缓存区,也就是说预留了一定的存储空间在内存中,用来暂时保存输入或者输出的数据,这样Node.js也可以处理二进制游戏数据

先说 二进制,二进制是计算机技术中广泛采用的一种数制,是用0和1两个数码来表示的数据,由于计算机只能识别二进制数据,而人们很难看懂那些0和1的组合代表什么,所以就需要将二进制数据转换为人们能够识别的字符,这就需要设置字符编码,通过字符编码找到相应的字符集进行转换,最远书的字符编码就是ASCII

再说 Buffer的构造函数

new Buffer(array)

new Buffer(size)

new Buffer (str[,encoding])

new Buffer (Buffer)

new Buffer (arrayBuffer)

可以看出,参数分别是字节,数组,buffer对象,字符串等等

再比如 写入读取的语法:

write(string[,offset[,length]][,encoding])

toString([encoding,state[,end]])

concat(list[,totallength])

Stream文件流

由于Buffer缓存区限制在1GB,超过1GB的文件无法直接完成读写,在读写大文件时,如果读/写资源一直持续不停,那么Node.js就无法继续其他的工作,为此,Node.js提供了Stream文件流模块

最理想的方法www.sangpi.com就是,读一部分,写一部分,不论文件的大小,只是时间的问题,总会处理完成,这就需要用到流的概念

文件A通过流动的形式通过数据流管道,进入文件B中,采用“读一部分。写一部分”的方式,流的好处就是,接收方可以提前处理,缩短时间,提高速度,就像在线看视频,并不是全部缓存好了再播放,而是看一部分,缓存一部分

Stream四种流类型

Readable

Writable

Duplex

Transform

而在使用大文件复制时,通过可读流的chunk参数传递数据,chunk就像接数据的盆,在可读流中还有一个函数叫 pipe(),这个函数是一个很高效的文件处理方式,可以简化之前复制文件的操作,所以,使用pipe进行完成数据的读取和写入也是很重要的

以上是关于Node.js处理数据IO的主要内容,如果未能解决你的问题,请参考以下文章

使用 socket.io node.js 和传入消息的通知系统的架构实现和设计

Socket.io node.js,如何避免记录连接时间或考虑页面刷新/多个套接字?

格式化消息以从 python 客户端发送到 socket.io node.js 服务器

Node.js处理数据IO

Node.js处理I/O数据之Buffer模块缓冲数据

[Node.js]Buffer