6 个版本 (破坏性更新)
0.5.0 | 2024年7月23日 |
---|---|
0.4.0 | 2023年12月5日 |
0.3.0 | 2023年9月22日 |
0.2.1 | 2022年11月23日 |
0.1.0 | 2022年6月8日 |
#589 in Rust 模式
每月589次 下载
用于 tass
11KB
172 行
文件切片
FileSlice
相当于 File
对 Vec<u8>
的作用,相对于 File
的优势
- 可以切片,将作用范围缩小到原始文件中的某个范围
- 克隆成本低(原子添加;无需系统调用)
- 搜索非常便宜(普通添加;无需系统调用)
- 克隆之间互不影响(文件描述符的真正游标永远不会使用)。
一旦创建,FileSlice
的长度永远不会改变,即使底层文件会改变。例如,如果另一个进程向文件中添加一些数据,您需要调用 FileSlice::expand
以添加新数据。
可选功能
为自然受益于文件切片的 crate 提供的可选集成
tar
:添加了一个slice_tarball
辅助方法,用于将tar::Archive
切割成多个FileSlice
。parquet
:为FileSlice
添加了ChunkReader
实现。Parquet 文件包含许多页面,解码器需要交错读取这些页面。对于File
的ChunkReader
实现通过创建许多 fd 克隆来完成此操作。使用FileSlice
可以在达到 fd 限制之前打开大约 7 倍的 parquet 文件。
依赖关系
~8–18MB
~255K SLoC