Page 332 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 332
Потоки
Концепция потока (stream) важна для Node. Поток - это объект, который имеет
дело с данными (как и подразумевает его название) в потоке (слово поток должно
заставить вас думать о течении, а поскольку течение - это нечто, происходящее во
времени, ему имеет смысл быть асинхронным).
Потоки могут быть потоками чтения, записи или того и другого (дуплексные по
токи). Потоки имеют смысл тогда, когда передача данных осуществляется на про
тяжении некоторого времени. Примерами могут служить ввод пользователем дан
ных с клавиатуры или веб-службы с двусторонней связью с клиентом. При доступе
к файлам также зачастую используются потоки (даже при том, что мы вполне можем
читать и писать в файлы без потоков) . Мы будем использовать файловые потоки
для демонстрации создания потоков, чтения из них и записи, а также создания кана
ла (pipe) между ними.
Начнем с создания потока записи и запишем в него данные.
const fs require ( ' f s ' ) ;
const ws fs . createWriteStream ( ' strea . txt ' , { encoding: ' u t f 8 ' } ) ;
m
'
\
ws . w rite ( С трока 1 n ' ) ;
ws . write ( ' С трока 2 \ n ' ) ;
ws . e n ( ) ;
d
Методу end можно дополнительно передать аргумент данных, тогда
он будет эквивалентен вызову метода write. Таким образом, если
нужно вывести данные только один раз, можете просто вызвать ме
тод end с теми данными, которые вы хотите записать.
В наш поток записи (write stream - ws) можно выводить данные с помощью ме
тода write до вызова метода end, после чего поток будет закрыт, и дальнейшие вы
зовы метода wri te приведут к ошибке. Поскольку вы можете вызывать метод wri te
столько раз, сколько необходимо, а затем вызвать метод end, поток записи идеален
для записи данных в течение некоторого времени.
Т о чно так же мы можем создать поток чтения, чтобы читать данные по мере их
поступления.
const fs require ( f s ' ) ;
'
const rs = fs . createReadStream ( ' s t rea . txt ' , { encodi g : ' u tf 8 ' } ) ;
m
n
a
rs . o n ( ' dat ' , function ( d ata) {
console . l o ( ' > > Данные : ' + dat a . replace ( ' \ n ' , ' \ \n ' ) ) ;
g
} ) ;
rs . o n ( ' end ' , function ( d ata)
'
console . log ( > > Конец ' ) ;
} ) ;
Потоки 335

