Почему функция read(1) вызывает два раза в читаемом событии в узле js?

Есть один файл 'foo.txt', в котором написано 'koushik'. код:-

   var fs = require('fs');
   var rr = fs.createReadStream('foo.txt');
   rr.on('readable', function() {
   console.log('readable:', rr.read(1));
   });
   rr.on('end', function() {
      console.log('end');
   });

выход:-

k
o

0 ответов

В readableСобытие генерируется, когда есть данные, доступные для чтения из потока.

В read(1) у вас есть в этом обработчике событий, который будет читать один байт из доступных в настоящее время данных, каждый раз, когда readable событие пожаров.

Он срабатывает дважды, потому что обработка файлов в node.js решает запустить его дважды.

Вы можете получить ожидаемый результат, если вместо этого не используете аргумент для read()

var fs = require('fs');
var rr = fs.createReadStream('foo.txt');
rr.on('readable', function() {
  console.log('readable:', rr.read()); // read all available data
});
rr.on('end', function() {
  console.log('end');
});
Другие вопросы по тегам