免费公司网站,按照wordpress,浙江台州网络设计网站,jsp网站建设代码概念
流#xff08;Stream#xff09;是一种用于在节点#xff08;Node#xff09;之间传输数据的抽象概念。
它可以看作是一种连续的数据流#xff0c;数据可以按照连续的块#xff08;chunk#xff09;通过流从源#xff08;source#xff09;流向目的地#xff…概念
流Stream是一种用于在节点Node之间传输数据的抽象概念。
它可以看作是一种连续的数据流数据可以按照连续的块chunk通过流从源source流向目的地destination。流可以是可读的Readable或可写的Writable也可以是可读写的Duplex。
Node.js 提供了 stream 模块它包含了用于创建、处理和管理流的各种类和方法。 当然在浏览器端HTML5 提供了一些原生的流处理能力如 ReadableStream 和 WritableStream。这些浏览器 API 允许通过网络请求获取数据的流式传输而不是一次性获取整个响应。另外浏览器端还可以使用 Blob 对象来处理文件流。 可读流Readable Stream可读流用于从数据源中读取数据。例如可以使用可读流从文件系统中读取文件、从网络中接收数据、从标准输入读取用户输入等。可读流的常见用法包括使用 fs.createReadStream() 创建文件读取流、使用 http.IncomingMessage 对象获取 HTTP 请求的可读流。 可写流Writable Stream可写流用于将数据写入目的地。例如可以使用可写流将数据写入文件、将数据发送到网络、将数据输出到标准输出等。可写流的常见用法包括使用 fs.createWriteStream() 创建文件写入流、使用 http.ServerResponse 对象发送 HTTP 响应的可写流。 双工流Duplex Stream双工流实现了同时可读可写的功能。它可以同时处理输入和输出流。例如可以使用双工流处理网络通信中的数据读取和写入。 转换流Transform Stream转换流是一种特殊的双工流它可以对流中的数据进行转换。例如可以使用转换流进行数据压缩、加密、解密、格式转换等操作。常见的转换流包括 zlib.createGzip() 创建用于数据压缩的流、crypto.createCipher() 创建用于数据加密的流等。
具体用法
数据转换流可以用于在数据传输的过程中进行转换操作。通过使用转换流Transform Stream我们可以对流中的数据进行处理、转换和过滤。常见的转换操作包括数据压缩使用 zlib.createGzip() 创建压缩流、数据加密使用 crypto.createCipher() 创建加密流等。
例如以下示例将一个文本文件压缩并保存成新的文件
const fs require(fs);
const zlib require(zlib);const readableStream fs.createReadStream(input.txt);
const gzipStream zlib.createGzip();
const writableStream fs.createWriteStream(output.txt.gz);readableStream.pipe(gzipStream).pipe(writableStream);在这个示例中通过将可读流连接到压缩流然后再连接到可写流实现了从输入文件到输出压缩文件的流转换。
大文件处理使用流可以有效地处理大文件而不需要将整个文件加载到内存中。通过将文件读取流连接到文件写入流可以逐块地将大文件从源复制到目标地。
例如以下示例将一个大文件复制到新的文件
const fs require(fs);const readableStream fs.createReadStream(input.txt);
const writableStream fs.createWriteStream(output.txt);readableStream.pipe(writableStream);这段代码使用可读流从 input.txt 文件中读取数据并使用可写流将数据写入 output.txt 文件中。通过使用流大文件可以逐块地处理减少了内存占用。
网络通信流在网络通信中也经常被使用。在服务器端可以使用可读流读取请求数据同时通过可写流向客户端发送响应数据。在客户端同样可以使用可读流读取服务器响应数据通过可写流将请求数据发送到服务器。
例如以下示例使用 Node.js 的 http 模块创建一个简单的 Web 服务器并将接收到的请求数据作为响应返回给客户端
const http require(http);const server http.createServer((req, res) {req.setEncoding(utf-8);req.on(data, (chunk) {console.log(Received data: ${chunk});});res.write(Hello, World!);res.end();
});server.listen(8080, () {console.log(Server is listening on port 8080);
});在这个示例中当客户端发送请求时服务器会将请求的数据作为流式数据接收。在 data 事件处理程序中我们可以对接收到的数据进行处理。同时服务器使用 write() 方法将响应数据写入可写流最后使用 end() 方法结束响应。