lib/readable.js
function ReadStream(opts) {
    assert.object(opts);
    if (opts.encoding !== null)
        assert.optionalString(opts.encoding, 'options.encoding');
    assert.optionalNumber(opts.end, 'options.end');
    assert.optionalNumber(opts.fd, 'options.fd');
    assert.object(opts.fs, 'options.fs');
    assert.optionalNumber(opts.start, 'options.start');
    assert.optionalBool(opts.autoClose, 'options.autoClose');

    stream.Readable.call(this, opts);

    this.autoClose = opts.autoClose === undefined ? true : opts.autoClose;
    this.encoding = opts.encoding || null;

    this._fd = opts.fd;
    this._fs = opts.fs;
    this._end = opts.end || Infinity;
    this._start = opts.start || 0;

    this._pos = this._start;
    this._range = this._end - this._start;

    if (this._fd) {
        setImmediate(this.emit.bind(this, 'open', this._fd));
    } else {
        this._opening = true;
    }
}
function ReadStream(opts) {
    assert.object(opts);
    if (opts.encoding !== null)
        assert.optionalString(opts.encoding, 'options.encoding');
    assert.optionalNumber(opts.end, 'options.end');
    assert.optionalNumber(opts.fd, 'options.fd');
    assert.object(opts.fs, 'options.fs');
    assert.optionalNumber(opts.start, 'options.start');
    assert.optionalBool(opts.autoClose, 'options.autoClose');

    stream.Readable.call(this, opts);

    this.autoClose = opts.autoClose === undefined ? true : opts.autoClose;
    this.encoding = opts.encoding || null;

    this._fd = opts.fd;
    this._fs = opts.fs;
    this._end = opts.end || Infinity;
    this._start = opts.start || 0;

    this._pos = this._start;
    this._range = this._end - this._start;

    if (this._fd) {
        setImmediate(this.emit.bind(this, 'open', this._fd));
    } else {
        this._opening = true;
    }
}
/--- Streams