• path {string|Buffer|URL}
    • options {string|Object}
      • flags {string} 参见[文件系统 flag 的支持][support of file system flags]。 默认值: 'r'
      • encoding {string} 默认值: null
      • fd {integer} 默认值: null
      • mode {integer} 默认值: 0o666
      • autoClose {boolean} 默认值: true
      • emitClose {boolean} 默认值: false
      • start {integer}
      • end {integer} 默认值: Infinity
      • highWaterMark {integer} 默认值: 64 * 1024
      • fs {Object|null} 默认值: null
    • 返回: {fs.ReadStream} 参见[可读流][Readable Stream]。

    与可读流的 16 kb 的默认 highWaterMark 不同,此方法返回的流具有 64 kb 的默认 highWaterMark

    options 可以包括 startend 值,用于从文件中读取一定范围的字节,而不是读取整个文件。 startend 都是包含的,并且从 0 开始计数,允许的值在 [0, [Number.MAX_SAFE_INTEGER]] 的范围内。 如果指定了 fd,并且省略 start 或为 undefined,则 fs.createReadStream() 会从当前的文件位置继续读取。 encoding 可以是能被 [Buffer] 接受的任何一种字符编码。

    如果指定了 fd,则 ReadStream 会忽略 path 参数,并且会使用指定的文件描述符。 这意味着不会触发 'open' 事件。 fd 必须是阻塞的,非阻塞的 fd 应该传给 [net.Socket]。

    如果 fd 指向仅支持阻塞读取的字符设备(例如键盘或声卡),则在数据可用之前,读取操作不会结束。 这可以防止进程的退出与流的自动关闭。

    默认情况下,流被销毁之后不会触发 'close' 事件。 这与其他 Readable 流的默认设置是相反的。 设置 emitClose 选项为 true 可以更改此行为。

    通过提供 fs 选项,可以重写对应的 fs 实现(用于 openreadclose)。 当提供 fs 选项时,则必须重写 openreadclose

    1. const fs = require('fs');
    2. // 从某个字符设备创建流。
    3. const stream = fs.createReadStream('设备');
    4. setTimeout(() => {
    5. stream.close(); // 这可能不会关闭流。
    6. // 手动标记流的结束,就像底层的资源自身已表明文件的结束一样,使得流可以关闭。
    7. // 这不会取消待处理的读取操作,如果存在此类操作,则进程可能仍无法成功地退出,直到完成。
    8. stream.push(null);
    9. stream.read(0);
    10. }, 100);

    如果 autoClose 为 false,则即使发生错误,文件描述符也不会被关闭。 应用程序需要负责关闭它并确保没有文件描述符泄漏。 如果 autoClose 被设置为 true(默认的行为),则当 'error''end' 事件时,文件描述符会被自动地关闭。

    mode 用于设置文件模式(权限和粘滞位),但仅限于文件被创建时。

    示例,读取文件(长度为 100 个字节)的最后 10 个字节:

    1. fs.createReadStream('文件', { start: 90, end: 99 });

    如果 options 是字符串,则它指定字符编码。