Replace internal buffer in decoder with BufRead
#231
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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