Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке Readable stream?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Readable Stream** - тип потоку для читання даних із джерела частинами, а не цілком; дозволяє працювати з великими файлами чи мережевими даними, не завантажуючи весь вміст у пам'ять. **Ключове:** може працювати у flowing mode (дані самі течуть через подію `data`) чи paused mode (ти сам викликаєш `.read()`) - `.pipe()` використовує перший режим і сам керує backpressure.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Readable Stream** у Node.js - це один із типів потоків (streams), призначений **для читання даних із джерела частинами**, а не цілком. Він дозволяє працювати з великими файлами чи потоками даних (наприклад, HTTP-запитами, сокетами, файловими потоками) **без завантаження всього вмісту в пам'ять**. ### Основна ідея Замість того щоб отримати всі дані одразу, Readable Stream видає їх **порціями (chunks)**. Це робить обробку даних: - **ефективнішою за пам'яттю** - особливо під час роботи з великими файлами; - **асинхронною** - дані читаються в міру їхнього надходження. ### Приклади Readable Stream у Node.js Деякі вбудовані об'єкти вже реалізують інтерфейс Readable Stream: - `fs.createReadStream()` - читання файлів; - `http.IncomingMessage` - тіло вхідного HTTP-запиту чи відповіді; - `process.stdin` - стандартне введення; - `net.Socket` - сокети TCP. ### Режими роботи Readable Stream Readable Stream може працювати в **двох режимах**: 1. **Flowing mode (потоковий)** Дані автоматично читаються й одразу надходять в обробники події `data`. ```javascript const fs = require('fs'); const stream = fs.createReadStream('file.txt', 'utf8'); stream.on('data', chunk => { console.log('Отримано шматок даних:', chunk); }); stream.on('end', () => { console.log('Читання завершено'); }); ``` 2. **Paused mode (призупинений)** Потік чекає, поки ти викличеш `.read()` вручну. ```javascript const fs = require('fs'); const stream = fs.createReadStream('file.txt', 'utf8'); stream.on('readable', () => { let chunk; while ((chunk = stream.read()) !== null) { console.log('Прочитано chunk:', chunk); } }); ``` ### Важливі події Readable Stream | Подія | Опис | |---|---| | `data` | Викликається під час отримання чергового шматка даних | | `end` | Потік завершено, даних більше немає | | `error` | Помилка під час читання | | `close` | Потік остаточно закрито | | `readable` | Можна викликати `read()` - дані готові | ### Pipe (перенаправлення потоку) Одне з найпотужніших застосувань - передача даних напряму в Writable Stream: ```javascript const fs = require('fs'); const readable = fs.createReadStream('input.txt'); const writable = fs.createWriteStream('output.txt'); readable.pipe(writable); ``` > `pipe()` автоматично керує потоком - читає рівно стільки, скільки встигає записуватися в інший потік. ### Переваги Readable Streams - Асинхронність (не блокує event loop) - Низьке споживання пам'яті - Можливість ланцюжків (`pipe()`) - Підтримка backpressure (керування швидкістю передачі даних)Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.