# 流式操作
# 流式操作
一种是 buffer 模式,一种是 stream 模式,buffer 模式就是取完数据一次性操作,stream 模式就是边取数据边操作。**原来的方式在处理数据量较大的文件**时不能分块处理,导致速度慢,内存容易爆满。
## 读取文件
~~~
const path = require('path');
const fs = require("fs");
let data = '';
// 创建可读流
let readerStream = fs.createReadStream(path.join(__dirname, 'input.txt'));
// 设置编码为 utf8。
readerStream.setEncoding('utf8');
// 处理流事件
// 有有数据可读时触发
readerStream.on('data', (chunk) => {
data += chunk;
});
// 当没有更多的数据可读时触发
readerStream.on('end', () => {
console.log(data);
});
// 在读取或写入过程中发生错误时触发
readerStream.on('error', (err) => {
console.log(err.stack);
});
~~~
## 写入文件
~~~
const path = require('path');
const fs = require("fs");
let data = '你好美,么么哒';
// 创建一个可以写入的流,写入到文件 output.txt 中
let writerStream = fs.createWriteStream(path.join(__dirname, 'output.txt'));
// 处理流事件
// 所有数据已被写入到底层系统时触发
writerStream.on('finish', () => {
console.log("写入完成。");
});
// 在读取或写入过程中发生错误时触发
writerStream.on('error', (err) => {
console.log(err.stack);
});
// 使用 utf8 编码写入数据
writerStream.write(data, 'utf8');
// 标记文件末尾,表明后面没数据要再写入了
writerStream.end();
~~~
- NodeJs
- 01-万维网
- 02-CS 架构 VS BS 架构
- 03-Web 服务器访问流程
- 04-url
- 05-网络传输协议
- 06-HTTP 协议
- 07-报文
- 08-命令行界面
- 09-什么是 Node.js
- 10-环境安装及配置
- 11-JavaScript 代码运行环境
- 12-全局对象
- 13-Buffer
- 14-模块化
- 15-EventEmitter
- 16-path模块
- 17-流式操作
- 18-包
- 19-模板技术
- 20-ejs入门
- 21-express
- 01-什么是express
- 02-Hellow Express
- 03-静态资源服务
- 04-路由
- 05-模块化路由处理程序
- 06-中间件
- 07-手动实现中间件
- 08-常用内置中间件和第三方中间件
- 09-响应
- 10-获取请求参数
- 11-Express 中使用模板引擎
- 22-web存储与安全
- 01-cookie
- 02-sessionStorage
- 03-localStorage
- 04-base64
- 05-https
- 06-同源策略