#io #buffering #read #data #reading #reader #virtually-concatenated

exact-reader

I/O缓冲区crate,支持基于预留的读取和虚拟连接文件处理

3个版本

0.1.4 2023年11月21日
0.1.3 2023年11月19日
0.1.2 2023年7月28日
0.1.1 2023年7月27日
0.1.0 2023年7月27日

#3 in #buffering

29 每月下载次数

MIT许可证

74KB
1.5K SLoC

exact-read

Documentation crates

exact-read crate是一个IO缓冲库,提供基于预留的缓冲,以实现从文件中高效读取数据。基于预留的缓冲允许在任何时候决定缓冲区大小。这允许对像网络这样的昂贵系统进行最小I/O操作。此外,该crate还支持虚拟连接文件,允许将分离的文件视为一个连续的流进行处理和定位/读取。

MultiFileFileExactReader使用和实现Seek + Read以来,这些结构体可以单独使用,而无需将它们链接起来。

use std::io::{Cursor, Read};

use exact_reader::{MultiFile, File, ExactReader};

fn into_file(value: Cursor<Vec<u8>>) -> File<Cursor<Vec<u8>>> {
    let len = value.get_ref().len();
    File {
        file: value,
        size: len,
        filename: "cursor".to_string(),
    }
}

fn main() {
    let a: Cursor<Vec<u8>> = Cursor::new(vec![1u8, 2, 3]);
    let b: Cursor<Vec<u8>> = Cursor::new(vec![4u8, 5, 6]);

    let mut multifile = MultiFile::new(vec![into_file(a), into_file(b)]);
    let mut reader = ExactReader::new_multi(multifile);
    reader.reserve(6);

    let mut buf = [0u8; 4];
    reader.read(&mut buf).unwrap();
    
    assert_eq!(buf, [1, 2, 3, 4])
}

无运行时依赖