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
   327   328   329   330   331   332   333   334   335   336   337