Проверяет понимание различий между Duplex и Transform стримами в Node.js, что важно для работы с потоками данных и построения эффективных пайплайнов.
В Node.js стримы — это абстракция для работы с потоками данных. Duplex и Transform оба реализуют интерфейсы Readable и Writable, но отличаются семантикой связи между чтением и записью.
Duplex-стрим имеет две независимые стороны: можно писать в него и читать из него, но эти операции не связаны напрямую. Классический пример — сетевой сокет: вы отправляете данные на сервер и одновременно получаете ответ. Запись не превращается автоматически в читаемые данные.
const net = require('net');
const socket = net.connect(80, 'example.com');
socket.write('GET / HTTP/1.1\r\nHost: example.com\r\n\r\n');
socket.on('data', chunk => console.log(chunk.toString()));
// запись и чтение идут независимоTransform — это Duplex, у которого записываемые данные проходят через функцию преобразования и становятся доступными для чтения. Он полезен для сжатия, шифрования, парсинга и других операций «на лету».
const { Transform } = require('stream');
const upper = new Transform({
transform(chunk, enc, cb) {
cb(null, chunk.toString().toUpperCase());
}
});
process.stdin.pipe(upper).pipe(process.stdout);
// ввод преобразуется в верхний регистрИтог: используйте Duplex, когда нужны две независимые стороны обмена (сокеты, каналы), и Transform, когда данные нужно преобразовывать по мере прохождения через стрим (gzip, шифрование, парсинг).