Drop-in replacements for buffered I/O types in std::io
.
These replacements retain the method names/signatures and implemented traits of their stdlib counterparts, making replacement as simple as swapping the import of the type.
All replacement types provide methods to: * Increase the capacity of the buffer * Get the number of available bytes as well as the total capacity of the buffer * Consume the wrapper without losing data
BufReader
provides methods to:
* Access the buffer through an &
-reference without performing I/O
* Force unconditional reads into the buffer
* Get a Read
adapter which empties the buffer and then pulls from the inner reader directly
* Shuffle bytes down to the beginning of the buffer to make room for more reading
* Get inner reader and trimmed buffer with the remaining data
BufWriter
and LineWriter
provide methods to:
* Flush the buffer and unwrap the inner writer unconditionally.
strategy
module:
BufReader
performs reads as dictated by the ReadStrategy
trait.BufReader
moves bytes down to the beginning of the buffer, to make more room at the end, when deemed appropriate by the
MoveStrategy
trait.BufWriter
flushes bytes to the inner writer when full, or when deemed appropriate by
the FlushStrategy
trait.Buffer
uses exact allocation instead of leaving it up to Vec
, which allocates sizes in powers of two.
Cargo.toml
:
toml
[dependencies]
buf_redux = "0.2"
lib.rs
or main.rs
:
rust
extern crate buf_redux;
And then simply swap the import of the types you want to replace:
BufReader
:
- use std::io::BufReader;
+ use buf_redux::BufReader;
BufWriter
:
- use std::io::BufWriter;
+ use buf_redux::BufWriter;
LineWriter
:
- use std::io::LineWriter;
+ use buf_redux::LineWriter;
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.