#buffer #io

rabuf

randome access buffer for io

19 releases

0.1.19 Feb 12, 2023
0.1.18 Jan 27, 2023
0.1.15 Jun 13, 2022
0.1.14 Feb 19, 2022
0.1.3 Nov 26, 2021

#55 in Memory management

Download history 1/week @ 2022-11-24 4/week @ 2022-12-01 11/week @ 2022-12-08 3/week @ 2022-12-15 20/week @ 2022-12-22 4/week @ 2022-12-29 58/week @ 2023-01-05 10/week @ 2023-01-12 252/week @ 2023-01-19 92/week @ 2023-01-26 71/week @ 2023-02-02 225/week @ 2023-02-09 111/week @ 2023-02-16 25/week @ 2023-02-23 8/week @ 2023-03-02 6/week @ 2023-03-09

156 downloads per month
Used in 2 crates

MIT/Apache

72KB
1.5K SLoC

rabuf

crate Docs Rust Version Apache2/MIT licensed Test ubu Test mac Test win

The Buffer for random access file.

When you read and write a file, this read and write in Chunk units and reduce IO operation.

Features

  • random access
  • Chunk units os io operation
  • reduce os io operation
  • support small size access accel.
  • minimum support rustc 1.56.1 (59eed8a2a 2021-11-01)

Examples

Write, Seek, Read

use rabuf::BufFile;
use std::fs::OpenOptions;
use std::io::{Read, Seek, SeekFrom, Write};

std::fs::create_dir_all("target/tmp").unwrap();

let path = "target/tmp/doc_test_1";
let bw = b"ABCEDFG\nhijklmn\n";

let f = OpenOptions::new().create(true)
    .read(true).write(true).open(path).unwrap();
let mut bf = BufFile::new("tes", f).unwrap();
bf.write_all(bw).unwrap();

bf.seek(SeekFrom::Start(0)).unwrap();

let mut br = vec![0u8; bw.len()];
bf.read_exact(&mut br).unwrap();
assert_eq!(&br, bw);

Write, Close, Open, Read

use rabuf::BufFile;
use std::fs::OpenOptions;
use std::io::{Read, Seek, SeekFrom, Write};

std::fs::create_dir_all("target/tmp").unwrap();
let path = "target/tmp/doc_test_2";

let bw = b"abcdefg\nHIJKLMN\n";
{
    let f = OpenOptions::new().create(true)
        .read(true).write(true).open(path).unwrap();
    let mut bf = BufFile::new("tes", f).unwrap();
    bf.write_all(bw).unwrap();
}
{
    let f = OpenOptions::new().create(true)
        .read(true).write(true).open(path).unwrap();
    let mut bf = BufFile::new("tes", f).unwrap();
    let mut br = vec![0u8; bw.len()];
    bf.read_exact(&mut br).unwrap();
    assert_eq!(&br, bw);
}

Changelogs

This crate's changelog here.

License

This project is licensed under either of

at your option.

No runtime deps

Features

  • buf_auto_buf_size
  • buf_debug
  • buf_hash_turbo
  • buf_lru
  • buf_myhash
  • buf_overf_rem
  • buf_overf_rem_all
  • buf_overf_rem_half
  • buf_pin_zero
  • buf_print_hits
  • buf_stats