兰州新站点seo加盟,wordpress 相册 免费模板,门户网站 建设 如何写,深圳网络有限公司有哪些Node.js 中的流#xff08;Streams#xff09;是一种处理读取和写入数据的抽象接口#xff0c;它允许你以非阻塞的方式处理数据#xff0c;这对于处理大文件或网络请求等 I/O 密集型任务非常有用。流主要分为四种类型#xff1a;可读流#xff08;Readable#xff09;、…Node.js 中的流Streams是一种处理读取和写入数据的抽象接口它允许你以非阻塞的方式处理数据这对于处理大文件或网络请求等 I/O 密集型任务非常有用。流主要分为四种类型可读流Readable、可写流Writable、双工流Duplex和转换流Transform。
1. 可读流Readable Streams
可读流用于从源读取数据。数据源可以是文件、网络连接等。
常用函数
read([size])从流中读取数据。不推荐直接使用因为流的设计初衷是自动处理数据的流动。pipe(destination[, options])将可读流的数据流重定向到一个可写流。这是处理流数据最常见的方法之一。pause()暂停流中的数据读取。resume()恢复流的数据读取。on(data, callback)当流中有数据可读时触发回调函数。on(end, callback)当没有更多数据可读时触发。on(error, callback)处理流中的错误。
2. 可写流Writable Streams
可写流用于将数据写入目标。目标可以是文件、网络连接等。
常用函数
write(chunk[, encoding][, callback])向流中写入数据。chunk 是要写入的数据encoding 是数据的编码如果 chunk 是字符串callback 是写入完成后的回调函数。end([chunk][, encoding][, callback])结束写入过程。可选的 chunk 和 encoding 允许在结束前再写入一些数据。on(drain, callback)当可以继续写入数据时被调用即流内部的缓冲区为空时。on(finish, callback)当所有数据都被写入底层系统时触发。on(error, callback)处理流中的错误。
3. 双工流Duplex Streams
双工流既是可读流也是可写流。例如TCP 套接字连接。
继承自可读流和可写流的属性和方法。
4. 转换流Transform Streams
转换流是特殊的双工流其输出数据是基于输入数据的某种转换。例如zlib.createGzip() 用于创建 gzip 压缩流。
常用函数继承自双工流
_transform(chunk, encoding, callback)这是转换流的核心方法需要被重写以实现自定义的转换逻辑。chunk 是要转换的数据块encoding 是数据的编码如果 chunk 是字符串callback 是转换完成后的回调函数。
const fs require(fs);
const readableStream fs.createReadStream(input.txt);
const writableStream fs.createWriteStream(output.txt); readableStream.pipe(writableStream); readableStream.on(end, () { console.log(文件读取完毕);
}); writableStream.on(finish, () { console.log(文件写入完毕);
});
在这个例子中我们使用 fs.createReadStream 创建一个可读流来读取 input.txt 文件然后使用 fs.createWriteStream 创建一个可写流来写入 output.txt 文件。通过 pipe 方法我们实现了从可读流到可写流的数据流重定向。当可读流结束end 事件时表示文件已读取完毕当可写流完成写入finish 事件时表示数据已完全写入目标文件。