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 中使用
72KB
1.5K SLoC
rabuf
随机访问文件缓冲区。
当你读写文件时,这个读写以 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);
}
变更日志
许可证
本项目许可方式为以下之一
- Apache 许可证 2.0 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
由您选择。