6 个版本
0.3.1 | 2021 年 12 月 7 日 |
---|---|
0.3.0 | 2020 年 7 月 1 日 |
0.2.0 | 2020 年 6 月 13 日 |
0.1.2 | 2019 年 1 月 28 日 |
0.1.1 | 2018 年 9 月 26 日 |
83 在 无标准库 中排名
6,080 每月下载量
在 110 个 Crates 中使用 (直接使用 15 个)
14KB
273 代码行
遍历简单的二进制 blob 存储。
存储格式
存储格式表示一系列二进制 blob。该格式使用 git 风格的 可变长度数量 (VLQ) 编码无符号数。
文件以去重 blob 的数量 d
开始。之后是 d
条记录。每条记录以整数 m
开始,紧接着是 m
字节表示去重的二进制 blob。
接下来是一系列存储 blob 的记录,数量未指定。每条记录以无符号整数 n
开始。该整数的最低有效位用作标志。如果标志等于 0,则该数之后跟 n >> 1
字节,表示存储的二进制 blob。否则,该条记录引用一个去重记录编号 n >> 1
。
示例
let buf = b"\x02\x05hello\x06world!\x01\x02 \x00\x03\x06:::\x03\x01\x00";
let mut v = blobby::BlobIterator::new(buf).unwrap();
assert_eq!(v.next(), Some(Ok(&b"hello"[..])));
assert_eq!(v.next(), Some(Ok(&b" "[..])));
assert_eq!(v.next(), Some(Ok(&b""[..])));
assert_eq!(v.next(), Some(Ok(&b"world!"[..])));
assert_eq!(v.next(), Some(Ok(&b":::"[..])));
assert_eq!(v.next(), Some(Ok(&b"world!"[..])));
assert_eq!(v.next(), Some(Ok(&b"hello"[..])));
assert_eq!(v.next(), Some(Ok(&b""[..])));
assert_eq!(v.next(), None);
let mut v = blobby::Blob2Iterator::new(buf).unwrap();
assert_eq!(v.next(), Some(Ok([&b"hello"[..], b" "])));
assert_eq!(v.next(), Some(Ok([&b""[..], b"world!"])));
assert_eq!(v.next(), Some(Ok([&b":::"[..], b"world!"])));
assert_eq!(v.next(), Some(Ok([&b"hello"[..], b""])));
assert_eq!(v.next(), None);
let mut v = blobby::Blob4Iterator::new(buf).unwrap();
assert_eq!(v.next(), Some(Ok([&b"hello"[..], b" ", b"", b"world!"])));
assert_eq!(v.next(), Some(Ok([&b":::"[..], b"world!", b"hello", b""])));
assert_eq!(v.next(), None);