AULA 32
MÓDULO 3
orientação a eventos
⏱ 50 min
Streams: Dados Contínuos
Readable, Writable, Transform, Duplex. pipe() e backpressure. Processar arquivos grandes sem saturar a memória.
streamsreadablewritabletransformpipebackpressurechunks
O que são Streams
Streams são sequências de dados processadas em pedaços (chunks), não de uma vez só. Em vez de ler um arquivo de 500MB inteiro para a memória e depois processar, você lê em chunks e processa cada um imediatamente.
analogia — torneira
Você não espera encher uma piscina para usar a água. A torneira libera continuamente enquanto você usa. Streams fazem isso com dados: processa enquanto chega, sem acumular tudo na RAM.📖
Readable
Lê dados: arquivo, HTTP, stdin
✍️
Writable
Escreve dados: arquivo, HTTP res, stdout
🔄
Transform
Transforma chunk a chunk: gzip, cipher
↔️
Duplex
Lê e escreve: TCP socket, WebSocket
pipe() — encadeando Streams
O método pipe() conecta streams formando um pipeline de transformação. Dados fluem de origem para destino sem acumular em memória.
backpressure
Streams gerenciam automaticamente o ritmo: se o destino for mais lento que a origem, o pipe aplica backpressure — pausa a leitura até o destino estar pronto. Zero estouro de memória.
javascript
// Streams — processamento eficiente de arquivos grandes const fs = require('fs') const zlib = require('zlib') // Comprimir arquivo de 2GB sem usar 2GB de RAM fs.createReadStream('video.mp4') // Readable .pipe(zlib.createGzip()) // Transform: gzip .pipe(fs.createWriteStream('video.mp4.gz')) // Writable // Stream de resposta HTTP — streaming de dados const express = require('express') const app = express() app.get('/download/:file', (req, res) => { const filePath = `./files/${req.params.file}` res.setHeader('Content-Type', 'application/octet-stream') fs.createReadStream(filePath).pipe(res) // Arquivo flui direto para o cliente chunk a chunk })
quiz · aula 32
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Qual é a principal vantagem de Streams sobre carregar tudo na memória?
QUESTÃO 02
O que é backpressure em Streams?
QUESTÃO 03
Para servir download de arquivos grandes via Express, qual abordagem é correta?
0/3