养病几天后又看了看node,总结一下node核心技术
node的三大特性:单线程、非阻塞I/O,事件驱动
1. node.js中的处理数据i/o
Node.js提供了‘Buffer’模块和'Stream'文件流,来处理大量的二进制数据。
(1)Buffer
缓冲区大小最大为1GB,是在内容中操作数据的容器,Node中Buffer操作有一下几种方式:
创建对象
- var buf=new Buffer(size);//创建内存空间最新版的node中修改此方法,可用new Buffer.alloc(size),这样就没有警告了
- var buf2=new Buffer([‘a’,‘b’]);//传入数组
- var buf3=new Buffer(“hello”,“utf-8”);//传入字符串以及编码方式
写入缓冲区
buf.write(‘b’,0,1,‘utf-8’);//参数分别代表写入的数据,开始写入的索引值,写入的字节数,使用的编码,后三个参数可以不传,有默认值。
读取数据
buf.toString();//将二进制数据转换为字符串的形式
拼接缓冲区
var buf3=Buffer.concat([buf1,buf2]);
(2)Stream
前面说了Buffer缓冲区限制自1GB,这样的操作对于体积较大的文件,比如视频等文件,使用Buffer很容易“爆仓”,理想的方法是读一部分写一部分,比如在网络上观看视频。Node中Stream有四种类型:Readable、Writeable、Duplex、Transform
读/写操作(依赖于fs模块)
fs.createReadStream(path[,options]);//依赖于chunk操作,让用户可以在源文件中分块读取文件中的数据
fs.createWriteStream(path[,options]);//让用户可以将数据写入目标位置
使用pip()处理大文件实现复制功能
readableStream.pip(writeableStream);//将readable到的文件拷贝到writeable中去
3. 异步编程和包资源管理
4. node.js中的网络编程
5. node.js中的文件操作(require(‘fs’))
尽量异步进行文件操作,同步操作很容易阻塞进程。