1 个不稳定版本
0.1.0 | 2023年2月12日 |
---|
#15 在 #bitstream
被 final-state-rs 使用
46KB
1K SLoC
Rust 实现的标准比特流
使用 meepmorp,你可以非常高效地在流上读写。这个库试图与你在 C 或 C++ 中常见的所有先前标准实现并行,使用简单,结合了一些酷炫的 Rust 工具。
写入
在读取任何内容之前,有人需要先写入数据,如下所示
// This create you a stream with a `usize` a
// temporary register
let mut e_stream = BitEstream::new(len).unwrap();
// Add N bits in temp register
// ( You can go up to 64 bits on x64
// and obviously to 32 bits if x86 )
e_stream.add_bits(usized, 3).unwrap();
e_stream.add_bits(usized, 1).unwrap();
e_stream.add_bits(usized, 5).unwrap();
e_stream.add_bits(usized, 5).unwrap();
// Flush temp register, store bits into the final stream
e_stream.flush_bits();
// Close the stream and you're done (that put an endMark
// and flush the latest remainings bits from the temp
// container )
e_stream.close_stream().unwrap();
let vec: Vec<u8> = e_stream.into();
读取
读取也很简单。
// This create you a stream with a `usize` a
// temporary register
let vec: Vec<u8> = /* eluded */
let mut d_stream = Bitdstream::try_from(vec).unwrap();
// Or even from a closed (or not) encoder stream
let mut d_stream = Bitdstream::try_from(e_stream).unwrap();
// Add N bits in temp register
// ( You can go up to 64 bits on x64
// and obviously to 32 bits if x86 )
d_stream.read_bits(3).unwrap();
d_stream.read_bits(1).unwrap();
d_stream.read_bits(5).unwrap();
d_stream.read_bits(5).unwrap();
// Flush temp register, store bits into the final stream
d_stream.reload_container();
基准测试
速度,速度,速度。
在单元测试中,你可以看到这样的代码
let buffer = Vec::with_capacity(len);
// this is randomly filled as used in tests
let mut e_stream = BitEstream::new(len + 1).unwrap();
for (i, byte) in buffer.iter().enumerate() {
if i > 0 && i % CTNR_BYTES_SIZE == 0 {
e_stream.flush_bits();
}
e_stream.add_bits(*byte as usize, BYTE_LEN).unwrap();
}
e_stream.close_stream().unwrap();
我选择在笔记本电脑上对完整的写入和读取过程进行基准测试,使用了 10kb。以下是 criterion 报告图,我得到的值与 bitstream-io crate 非常相似。使用以下命令在你的电脑上检查: cargo bench
。
此外,开发者!如果你正在寻找一个适用于比特流的瑞士军刀式库,你可能更适合使用 bitstream-io。所有这些都取决于你的需求 =-) (抱歉,我把这条消息放在文档的末尾)
下一步
我希望能够提供使用迭代器而不是已分配向量的可能性。目前还没有计划或里程碑。
许可证
此开发受 MIT 许可证保护,
依赖项
~130KB