Node.js系列笔记-2(不定期更新)
- Node.js Buffer(缓冲区)
- 问题来源
- JavaScript语言自身只有字符串数据类型,没有二进制数据类型
- 在处理像TCP流或文件流时,必须用到二进制数据
- 因此在Node.js中,定义了一个Buffer类,用来存放二进制数据
- 基本情况
- 在Node.js中,Buffer类是随着Node内核一起发布的核心库
- Buffer库为Node.js带来了一种存储原始数据的方法
- 原始数据存储在Buffer类的实例中
- 一个Buffer类类似于一个整数数组,但它对应于V8堆内存之外的一块原始内存
- 创建buffer类
- var buf = new Buffer(10);
- var buf = new Buffer([10, 20, 30, 40, 50]);
- var buf = new Buffer("www.google.com", "utf-8");
- 其他编码格式,ascii utf8 utf16le ucs2 base64 hex ....
- 写入缓冲区
- buf.write(string[, offset[, length]][, encoding])
- string:写入缓冲区的字符串
- offset:缓冲区开始写入的索引值,默认为0
- length:写入的字节数,默认为buffer.length
- encoding:使用的编码,默认为utf8
- 返回值
- 返回实际写入的大小,空间不足则写入部分字符串
- buf.write(string[, offset[, length]][, encoding])
- 读取缓冲区
- buf.toString([encoding[, start[, end]]])
- encoding:使用的编码,默认utf8
- start:开始读取的索引位置,默认为0
- end:结束为止,默认为缓冲区末尾
- 返回值
- 解码缓冲区数据并使用指定的编码返回字符串
- buf.toString([encoding[, start[, end]]])
- 将Buffer转换为JSON对象
- 缓冲区合并
- 缓冲区比较
- 缓冲区拷贝
- 缓冲区剪裁
- 缓冲区长度
- 方法参考手册:http://www.runoob.com/nodejs/nodejs-buffer.html
- 问题来源
- Node.js Stream
- 概要
- Stream是一个抽象接口,Node中许多对象实现了这个接口
- 如对http服务器发起请求的request对象即是一个stream,还有stdout
- 四种类型
- Readable:可读操作
- Writable:可写操作
- Duplex:可读可写操作
- Transform:操作被写入数据,然后读出结果
- 所有的Stream对象都是EventEmitter的实例,常用事件有:
- data:当有数据可读时触发
- end:没有更多的数据可读时触发
- error:发生错误时触发
- finish:所有数据被写入到底层系统是触发
- 读取数据
-
1 var fs = require("fs"); 2 var data = ''; 3 var readerStream = fs.createReadStream('input.txt'); 4 readerStream.setEncoding('UTF8'); 5 readerStream.on('data', function(chunk){ 6 data += chunk; 7 }); 8 readerStream.on('end',function(){ 9 console.log(data); 10 }); 11 readerStream.om('error',function(){ 12 console.log(error.stack); 13 }); 14 console.log("Success!");
-
- 写入数据
-
1 var fs = require("fs"); 2 var data = "www.google.com"; 3 var writerStream = fs.createWriterStream('output.txt'); 4 writerStream.write(data, 'UTF8'); 5 writerStream.end(); 6 writerStream.on('finish',function(){ 7 console.log("ok"); 8 }); 9 writerStream('error', function(err){ 10 console.log(err.stack); 11 }); 12 console.log("ok");
-
- 管道流
-
1 var fs = require('fs'); 2 var readerStream = fs.createReaderStream('input.txt'); 3 var writerStream = fs.createWriterStream('output.txt'); 4 readerStream.pipe(writerStream); 5 console.log("ok");
-
- 链式流
- 概要