Streams sind in Node.js sehr wichtig, da sie eine effiziente Möglichkeit bieten, mit großen Datenmengen umzugehen. Sie lassen Sie Daten Stück für Stück verarbeiten, ohne sie alle auf einmal im Speicher halten zu müssen.
Hier ist ein einfaches Beispiel, wie man Streams in Node.js verwendet:
```javascript
let fs = require(‘fs’);
let readable = fs.createReadStream(‘input.txt’); // Erstellt einen lesbaren Datenstrom
let writable = fs.createWriteStream(‘output.txt’); // Erstellt einen schreibbaren Datenstrom
readable.pipe(writable); // Leitet die Daten vom lesbaren in den schreibbaren Stream
```
In diesem Beispiel liest `createReadStream` die Datei ‘input.txt’ stückweise in den Speicher. Mit der `pipe()`-Funktion werden die gelesenen Daten direkt in den `writable`-Stream geschrieben, der sie in die Ausgabedatei ‘output.txt’ schreibt.
Man kann auch auf Events reagieren, die von den Streams ausgelöst werden. Zum Beispiel:
```javascript
readable.on(‘data’, (chunk) => {
console.log(`Received ${chunk.length} bytes of data.`);
});
readable.on(‘end’, () => {
console.log(‘No more data.’);
});
```
Die `data`-Events werden ausgelöst, sobald Daten verfügbar sind. Das `end`-Event wird ausgelöst, sobald alle Daten gelesen wurden. Dies kann nützlich sein, um den Fortschritt zu verfolgen oder um Ressourcen freizugeben, wenn die Arbeit erledigt ist.
Es gibt auch Duplex- und Transform-Streams, die gleichzeitig lesbar und schreibbar sind, bzw. Daten transformieren können. Diese sind aber etwas komplexer.