Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace internal buffer in decoder with BufRead #231

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Mar 31, 2023

  1. Replace internal buffer in decoder with BufRead

    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.
    Kixunil committed Mar 31, 2023
    Configuration menu
    Copy the full SHA
    7d4ea71 View commit details
    Browse the repository at this point in the history