20 个版本

0.1.20 2024年6月9日
0.1.19 2023年2月12日
0.1.18 2023年1月27日
0.1.15 2022年6月13日
0.1.3 2021年11月26日

#71 in 内存管理


2 crates 中使用

MIT/Apache

72KB
1.5K SLoC

rabuf

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

随机访问文件缓冲区。

当你读写文件时,这个读写以 Chunk 单位进行,以减少 I/O 操作。

特性

  • 随机访问
  • Chunk 单位 os I/O 操作
  • 减少 os I/O 操作
  • 支持小尺寸访问加速。
  • 最低支持 rustc 1.56.1 (59eed8a2a 2021-11-01)

示例

写、寻址、读

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

写、关闭、打开、读

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

变更日志

这个 crate 的变更日志在此。

许可证

本项目许可方式为以下之一

由您选择。

无运行时依赖

特性