The DecoderReader used an internal buffer for reading which came with a number of disadvantages, such as:
Needless copying from in-memory readers (slices)
Double-buffering already-buffered readers
The bytes are lost when dropping or calling into_inner
BUF_SIZE is not configurable
std::io::BufReader has access to some unstable optimizations which this crate cannot use
Reinvents the wheel; there already is std::io::BufReader
This change removes it and requires BufRead instead. Decoding is implemented on top of fill_buf for larger chunks with fallback to small, stack-allocated buffer for tiny chunks that may appear at boundaries.
To resolve borrowing problems decode_to_buf had to be removed which also enabled decoding bytes directly into internal buffer when the buffer to be filled is small rather than into a temporary buffer which is then copied.
This improves performance of reading by around 7-22% on my machine.
The
DecoderReader
used an internal buffer for reading which came with a number of disadvantages, such as:into_inner
BUF_SIZE
is not configurablestd::io::BufReader
has access to some unstable optimizations which this crate cannot usestd::io::BufReader
This change removes it and requires
BufRead
instead. Decoding is implemented on top offill_buf
for larger chunks with fallback to small, stack-allocated buffer for tiny chunks that may appear at boundaries.To resolve borrowing problems
decode_to_buf
had to be removed which also enabled decoding bytes directly into internal buffer when the buffer to be filled is small rather than into a temporary buffer which is then copied.This improves performance of reading by around 7-22% on my machine.
Closes #230