stream
The stream module provides APIs for handling streaming data. Streams allow processing data piece by piece instead of loading it all at once.
Types of Streams
- Readable: can be read from (
fs.createReadStream). - Writable: can be written to (
fs.createWriteStream). - Duplex: both readable and writable (
net.Socket). - Transform: duplex streams that modify data (
zlib.createGzip).
Core API
stream.Readable: implement custom readable streams.stream.Writable: implement custom writable streams.stream.Duplex: implement both.stream.Transform: implement transform.stream.pipeline(src, ...transforms, dest, cb)— pipe with error handling.stream.finished(stream, cb)— notify when done or errored.
Examples (English only)
const fs = require("fs");
const { Transform, pipeline } = require("stream");
// Transform to uppercase
const upper = new Transform({
transform(chunk, enc, cb) {
cb(null, chunk.toString().toUpperCase());
}
});
// Pipe file through transform and out
pipeline(
fs.createReadStream("input.txt"),
upper,
fs.createWriteStream("output.txt"),
(err) => {
if (err) console.error("Pipeline failed:", err);
else console.log("Pipeline succeeded");
}
);
Notes
- Streams handle backpressure, preventing memory overload.
- Always use pipeline instead of chaining
.pipe()for better error handling. - Use finished to know when a stream is fully consumed.
- Core modules like
fs,net,httpuse streams extensively.