revbufreader is Rust crate that provides a buffered reader capable of reading chunks of bytes of a data stream in reverse order. Its implementation is an adapted copy of BufReader from the nightly std::io.
```rust extern crate revbufreader;
use revbufreader::RevBufReader; use std::io::{self, Read};
fn main() { let data = [0, 1, 2, 3, 4, 5, 6, 7]; let inner = io::Cursor::new(&data); let mut reader = RevBufReader::new(inner);
let mut buffer = [0, 0, 0];
assert_eq!(reader.read(&mut buffer).ok(), Some(3));
assert_eq!(buffer, [5, 6, 7]);
let mut buffer = [0, 0, 0, 0, 0];
assert_eq!(reader.read(&mut buffer).ok(), Some(5));
assert_eq!(buffer, [0, 1, 2, 3, 4]);
} ```
```rust extern crate revbufreader;
use revbufreader::RevBufReader; use std::io::{self, BufRead};
fn main() { let data = "a\nb\nc"; let inner = io::Cursor::new(&data); let reader = RevBufReader::new(inner); let mut lines = reader.lines();
assert_eq!(lines.next().unwrap().unwrap(), "c".to_string());
assert_eq!(lines.next().unwrap().unwrap(), "b".to_string());
assert_eq!(lines.next().unwrap().unwrap(), "a".to_string());
assert!(lines.next().is_none());
} ```
revbufreader has two features that correspond to experimental features of nightly Rust:
If you use these in your project by adding #![feature(feature_name)]
, you'll need to enable these features for revbufreader as well in your Cargo.toml.