Replace internal buffer in decoder with BufRead#231
Open
Kixunil wants to merge 1 commit intomarshallpierce:masterfrom
Open
Replace internal buffer in decoder with BufRead#231Kixunil wants to merge 1 commit intomarshallpierce:masterfrom
BufRead#231Kixunil wants to merge 1 commit intomarshallpierce:masterfrom
Conversation
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.
Owner
|
Thanks for the contribution. It will probably take me some time to review it, but I'll get to it when I can. |
|
Any chance this could be rebased and reconsidered for merging? |
Author
|
I'll be happy to rebase if @marshallpierce has the time to do review of this. Otherwise rebasing would be just a waste of time for me. |
Owner
|
Please rebase and I will make time for it. |
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
DecoderReaderused an internal buffer for reading which came with a number of disadvantages, such as:into_innerBUF_SIZEis not configurablestd::io::BufReaderhas access to some unstable optimizations which this crate cannot usestd::io::BufReaderThis change removes it and requires
BufReadinstead. Decoding is implemented on top offill_buffor larger chunks with fallback to small, stack-allocated buffer for tiny chunks that may appear at boundaries.To resolve borrowing problems
decode_to_bufhad 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