#data-stream #reverse #buf-reader #byte-stream #order #byte-reader #buffered

rev_buf_reader

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.

4 releases (2 breaking)

0.3.0 Jan 31, 2022
0.2.0 Feb 1, 2020
0.1.1 May 12, 2019
0.1.0 Mar 14, 2019

#1041 in Algorithms

Download history 1661/week @ 2024-09-09 1587/week @ 2024-09-16 2929/week @ 2024-09-23 2445/week @ 2024-09-30 1413/week @ 2024-10-07 2814/week @ 2024-10-14 2937/week @ 2024-10-21 2642/week @ 2024-10-28 2507/week @ 2024-11-04 2390/week @ 2024-11-11 2144/week @ 2024-11-18 1970/week @ 2024-11-25 2126/week @ 2024-12-02 2872/week @ 2024-12-09 2563/week @ 2024-12-16 2445/week @ 2024-12-23

10,148 downloads per month
Used in 15 crates (13 directly)

Apache-2.0 OR MIT

33KB
475 lines

rev_buf_reader

GitHub Actions Workflow docs license Crates.io

This Rust crate 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.

Usage

Reading chunks of bytes in reverse order:

extern crate rev_buf_reader;

use rev_buf_reader::RevBufReader;
use std::io::{self, Read};

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]);

Reading text lines in reverse order:

extern crate rev_buf_reader;

use rev_buf_reader::RevBufReader;
use std::io::{self, BufRead};

let data = "This\nis\na sentence";
let inner = io::Cursor::new(&data);
let reader = RevBufReader::new(inner);
let mut lines = reader.lines();

assert_eq!(lines.next().unwrap().unwrap(), "a sentence".to_string());
assert_eq!(lines.next().unwrap().unwrap(), "is".to_string());
assert_eq!(lines.next().unwrap().unwrap(), "This".to_string());
assert!(lines.next().is_none());

Features

rev_buf_reader has one feature: read_initializer, which corresponds to an experimental feature of nightly Rust. If you use it in your project by adding #![feature(read_initializer)], you'll need to enable it for rev_buf_reader as well in your Cargo.toml.

Dependencies

~250KB