NodeJS | fs.createReadStream(path[, options])

NodeJS | fs.createReadStream(path[, options])

Параметр path (путь)

Оформляется в виде:

  1. <string> или
  2. <Buffer> или
  3. <URL>

Что-то одно на выбор.

 

Параметр options (настройки)

Оформляется в виде:

  1. <string> или
  2. <Object>

Что-то одно на выбор.

Состав:

flags (флаги)

<string> Смотрите поддержку флагов файловой системы. По умолчанию: ‘r’.

encoding (кодировка)

<string> По умолчанию: null

fd (дескриптор файла)

<integer> | <FileHandle> По умолчанию: null

mode (режим)

<integer> По умолчанию: 0o666

autoClose ()

<boolean> По умолчанию: true

emitClose ()

<boolean> По умолчанию: true

start (начало)

<integer>

end (конец)

<integer> По умолчанию: Infinity

highWaterMark (высокая отметка уровня воды)

<integer> По умолчанию: 64 * 1024

fs ()

<Object> | <null> По умолчанию: null

 

Возвращает экземпляр <fs.ReadStream>

В отличие от highWaterMark по умолчанию размером 16 КБ для <stream.Readable>, поток, возвращаемый этим методом, имеет значение highWaterMark по умолчанию, равное 64 КБ.

Настройки options могут включать начальное start и конечное end значения для чтения диапазона байтов из файла, а не всего файла. И начало start, и конец end включаются и начинают отсчёт с 0, допустимые значения находятся в диапазоне [0, Number.MAX_SAFE_INTEGER]. Если указан дескриптор fd, а начало start опущено или не определено, fs.createReadStream() последовательно читает с текущей позиции в файле. Кодировка encoding может быть любой из принятых <Buffer>.

Если указан fd, ReadStream проигнорирует аргумент пути и будет использовать указанный файловый дескриптор. Это означает, что никакое событие ‘open’ не будет сгенерировано. fd должен блокировать; неблокирующие fd должны передаваться в <net.Socket>.

Если fd указывает на символьное устройство, которое поддерживает только блокировку чтения (например, клавиатуру или звуковую карту), операции чтения не завершатся до тех пор, пока данные не будут доступны. Это может предотвратить завершение процесса и естественное закрытие потока.

 

По умолчанию поток будет генерировать событие ‘close’ после того, как он будет уничтожен. Установите для параметра emitClose значение false, чтобы изменить это поведение.

Предоставляя параметр fs, можно переопределить соответствующие реализации fs для открытия, чтения и закрытия. При предоставлении опции fs требуется переопределение для чтения. Если fd не указан, также требуется переопределение для открытия. Если autoClose имеет значение true, также требуется переопределение для закрытия.

 

import { createReadStream } from ‘fs’;

 

// Создайте поток с какого-нибудь символьного устройства.

const stream = createReadStream(‘/dev/input/event0’);

setTimeout(() => {

  stream.close(); // Это может не закрыть поток.

  // Искусственная маркировка конца потока, как если бы базовый
// ресурс сам указал конец файла, позволяет закрыть поток.

  // Это не отменяет незавершенные операции чтения, и если такая
// операция есть, процесс все равно не сможет успешно завершиться, пока не завершится.

  stream.push(null);

  stream.read(0);

}, 100);

 

Если autoClose имеет значение false, то файловый дескриптор не будет закрыт, даже если произойдет ошибка. Приложение обязано закрыть его и убедиться в отсутствии утечки дескриптора файла. Если для параметра autoClose установлено значение true (поведение по умолчанию), при ошибке ‘error’ или завершении ‘end’ дескриптор файла будет автоматически закрыт.

 

mode устанавливает режим файла (разрешение и липкие биты), но только если файл был создан.

Пример чтения последних 10 байтов файла длиной 100 байтов:

 

import { createReadStream } from ‘fs’;

 

createReadStream(‘sample.txt’, { start: 90, end: 99 });

 

Если options является строкой, то она определяет кодировку.

 

Информационные ссылки

Стандарт NodeJShttps://nodejs.org/dist/latest-v17.x/docs/api/fs.html#fscreatereadstreampath-options