Beginner Fundamentals

Streams

Streams let you handle data in chunks instead of loading everything into memory at once. This is essential for large files and network data.

Why streams

Reading a 2 GB file with readFile would load it all into memory. A stream reads small pieces, processes them, and moves on, keeping memory usage low.

Readable streams

A readable stream produces data you can listen to:

const fs = require("fs");

const stream = fs.createReadStream("big.txt", "utf8");

stream.on("data", (chunk) => {
  console.log("Got a chunk of", chunk.length, "characters");
});

stream.on("end", () => {
  console.log("Done reading");
});

Writable streams

A writable stream receives data:

const fs = require("fs");

const out = fs.createWriteStream("output.txt");
out.write("Line 1\n");
out.write("Line 2\n");
out.end();

Piping

pipe connects a readable stream to a writable one, copying data efficiently:

const fs = require("fs");

fs.createReadStream("input.txt").pipe(fs.createWriteStream("copy.txt"));

Summary

Streams move data in chunks, saving memory. Use pipe to connect a source to a destination with one line.