3个不稳定版本
使用旧的Rust 2015
0.1.1 | 2022年2月27日 |
---|---|
0.1.0 | 2017年9月9日 |
0.0.2 | 2016年9月25日 |
#823 in Rust模式
每月 38 次下载
21KB
481 行
cdc
一个用于在数据流上进行内容定义分块(CDC)的库。使用泛型迭代器实现,非常容易使用。
示例
let reader: BufReader<File> = BufReader::new(file);
let byte_iter = reader.bytes().map(|b| b.unwrap());
// Finds and iterates on the separators.
for separator in SeparatorIter::new(byte_iter) {
println!("Index: {}, hash: {:016x}", separator.index, separator.hash);
}
每个模块都通过示例进行文档说明,您可以在 examples/
文件夹中找到。
要运行它们,请使用以下命令:
cargo run --example separator --release
注意:有些示例正在寻找名为 myLargeFile.bin
的文件,我没有将其上传到Github。请使用您自己的文件进行测试。
crate中包含的内容
从低级到高级
-
一个
RollingHash64
特征,用于具有64位哈希值的滚动哈希。 -
Rabin64
,具有64位哈希值的Rabin指纹滚动哈希的实现。 -
Separator
,一个描述数据流中分隔符位置的struct。 -
SeparatorIter
,一个适配器,它接受一个Iterator<Item=u8>
作为输入,并枚举所有找到的分隔符。 -
Chunk
,一个描述数据流中数据片段(索引和大小)的struct。 -
ChunkIter
,一个适配器,它接受一个Iterator<Item=Separator>
作为输入,并枚举块。
实现细节
-
该库不会切割任何文件,它只提供如何操作的信息。
-
您可以根据需要更改
Rabin64
使用的默认窗口大小以及SeparatorIter
选择分隔符的方式。 -
该crate的设计可能会在未来某个时候发生变化。我正在等待Rust的一些功能成熟,特别是
impl Trait
功能。
性能
调试构建和发布构建在性能方面存在巨大差异。记住,当您测试库时,请使用 cargo run --release
。
我可能在某个时候尝试提高库的性能,但现在它对于大多数用途来说已经足够好了。
许可协议
用❤️编码,遵循MIT许可协议,具体请参阅MIT许可证文件。