readOrNull
The readable.read()
method reads data out of the internal buffer and returns it. If no data is available to be read, null
is returned. By default, the data is returned as a Buffer
object unless an encoding has been specified using the readable.setEncoding()
method or the stream is operating in object mode.
The optional size
argument specifies a specific number of bytes to read. If size
bytes are not available to be read, null
will be returned unless the stream has ended, in which case all of the data remaining in the internal buffer will be returned.
If the size
argument is not specified, all of the data contained in the internal buffer will be returned.
The size
argument must be less than or equal to 1 GiB.
The readable.read()
method should only be called on Readable
streams operating in paused mode. In flowing mode, readable.read()
is called automatically until the internal buffer is fully drained.
const readable = getReadableStreamSomehow();
// 'readable' may be triggered multiple times as data is buffered in
readable.on('readable', () => {
let chunk;
console.log('Stream is readable (new data received in buffer)');
// Use a loop to make sure we read all currently available data
while (null !== (chunk = readable.read())) {
console.log(`Read ${chunk.length} bytes of data...`);
}
});
// 'end' will be triggered once when there is no more data available
readable.on('end', () => {
console.log('Reached end of stream.');
});
Each call to readable.read()
returns a chunk of data, or null
. The chunks are not concatenated. A while
loop is necessary to consume all data currently in the buffer. When reading a large file .read()
may return null
, having consumed all buffered content so far, but there is still more data to come not yet buffered. In this case a new 'readable'
event will be emitted when there is more data in the buffer. Finally the 'end'
event will be emitted when there is no more data to come.
Therefore to read a file's whole contents from a readable
, it is necessary to collect chunks across multiple 'readable'
events:
const chunks = [];
readable.on('readable', () => {
let chunk;
while (null !== (chunk = readable.read())) {
chunks.push(chunk);
}
});
readable.on('end', () => {
const content = chunks.join('');
});
A Readable
stream in object mode will always return a single item from a call to readable.read(size)
, regardless of the value of the size
argument.
If the readable.read()
method returns a chunk of data, a 'data'
event will also be emitted.
Calling {@link read} after the 'end'
event has been emitted will return null
. No runtime error will be raised.
Since
v0.9.4
Parameters
Optional argument to specify how much data to read.