fuman readable stream
length of the buffer to read, or a buffer to read into (when a number is passed, a new buffer will be allocated)
what to do when the end of the stream is reached
error
- throw an PartialReadErrortruncate
- truncate the buffer to the number of bytes that were read. note that this might return 0 bytes
read exactly N bytes from the source