流是 Node.js 中处理数据的一种高效机制。它们允许你以连续的、非阻塞的方式处理数据,非常适合于处理大量数据或需要实时处理的数据。
创建可读流
可读流允许你从源中读取数据。你可以通过继承 stream.Readable
类来创建一个可读流。以下是一个简单的例子:
-- -------------------- ---- ------- ----- - -------- - - ------------------ ----- ---------------- ------- -------- - -------------------- - --------------- --------- - --------- --------- ---------- - -- - ------- - -- ----------- --- ----------------- - ---------------- -- ---- - ---- - --- ----- - ------------------------ --------------- - ------ - - - ----- -------- - --- ------------------- ------------------- ------- -- ---------------------- ------------
在这个例子中,我们定义了一个名为 MyReadableStream
的类,该类继承自 Readable
类。我们覆写了 _read()
方法,该方法会在内部调用时被触发,用来提供数据给流。当没有更多的数据可供读取时,我们推送一个 null
来结束读取过程。
创建可写流
可写流允许你向目的地写入数据。你可以通过继承 stream.Writable
类来创建一个可写流。以下是一个简单的例子:
-- -------------------- ---- ------- ----- - -------- - - ------------------ ----- ---------------- ------- -------- - -------------------- - --------------- - ------------- --------- --------- - --------------------- ---------------------- ----------- -- -------- - - ----- ---------------- - --- ------------------- -------------------------------- -- --- -------- ----- -------------------------------- -- --- -------- ----- ----------------------- -- ----
在这个例子中,我们定义了一个名为 MyWritableStream
的类,该类继承自 Writable
类。我们覆写了 _write()
方法,该方法会在内部调用时被触发,用来接收和处理传入的数据。当数据成功写入后,我们需要调用 callback()
来通知流数据已处理完毕。
创建双向流
双向流允许你同时进行读写操作。你可以通过继承 stream.Duplex
或 stream.Transform
类来创建一个双向流。以下是一个简单的例子:
-- -------------------- ---- ------- ----- - --------- - - ------------------ ----- -------------- ------- --------- - -------------------- - --------------- - ----------------- --------- --------- - ----- ---------------- - ------------------------------- ---------------------------- ----------- - - ----- -------------- - --- ----------------- ------------------------------ -- --- ----- ------------------------------ -- --- ----- ---------------------
在这个例子中,我们定义了一个名为 MyDuplexStream
的类,该类继承自 Transform
类。我们覆写了 _transform()
方法,该方法会在内部调用时被触发,用来接收传入的数据并转换它。转换后的数据会被推送到输出流中。当数据成功处理后,我们需要调用 callback()
来通知流数据已处理完毕。
创建管道流
管道流是一种将多个流连接在一起的方法,以便数据可以按顺序通过这些流进行处理。以下是一个简单的例子:
-- -------------------- ---- ------- ----- - --------- -------- - - ------------------ ----- -------------- - --- ---------- ------ - ------------------- ------------------- ---------------- -- ---- - --- ----- -------------- - --- ---------- ------------ --------- --------- - --------------------- ---------------------- ----------- - --- ------------------------------------
在这个例子中,我们创建了一个可读流和一个可写流,并使用 pipe()
方法将它们连接在一起。这使得可读流中的数据会自动传递到可写流中进行处理。
通过以上几个示例,你可以看到 Node.js 中流的强大功能以及如何灵活地使用它们来处理数据。流不仅可以提高数据处理效率,还能帮助你构建更加健壮和高效的 Node.js 应用程序。