12 个版本 (1 个稳定版)
使用旧的 Rust 2015
2.0.0-rc4 | 2017 年 2 月 24 日 |
---|---|
2.0.0-rc2 | 2017 年 2 月 23 日 |
1.0.0 | 2016 年 8 月 7 日 |
0.4.0 | 2016 年 8 月 3 日 |
0.2.2 | 2016 年 3 月 13 日 |
#1848 在 编码
31KB
726 行
BitSparrow 在 Rust 中
编码
use bitsparrow::Encoder;
let buffer = Encoder::new()
.uint8(100)
.string("Foo")
.end();
assert_eq!(buffer, &[0x64,0x03,0x46,0x6f,0x6f])
每个 Encoder
方法都会消耗该结构的实例。如果您需要中断单子链,则存储编码器的中间状态,例如。
use bitsparrow::Encoder;
let encoder = Encoder::new();
encoder.uint8(100);
/* ... */
let buffer = encoder.string("Foo").end();
assert_eq!(buffer, &[0x64,0x03,0x46,0x6f,0x6f]);
解码
use bitsparrow::Decoder;
let buffer = &[0x64,0x03,0x46,0x6f,0x6f];
let mut decoder = Decoder::new(buffer);
assert_eq!(100u8, decoder.uint8().unwrap());
assert_eq!("Foo", decoder.string().unwrap());
assert_eq!(true, decoder.end());
解码器允许您以编码的顺序检索值。调用 end
方法是可选的 - 如果您已读取整个缓冲区,它将返回 true
,确保已读取整个缓冲区。
性能
所有原始数字类型都使用直接低级内存复制和类型变换进行编码和解码。即使在小端硬件(编码数据始终为大端)上,编码/解码的成本几乎为零。
test allocate_8 ... bench: 26 ns/iter (+/- 4)
test decode_f64 ... bench: 0 ns/iter (+/- 0)
test decode_u64 ... bench: 0 ns/iter (+/- 0)
test encode_f64 ... bench: 26 ns/iter (+/- 6)
test encode_u64 ... bench: 26 ns/iter (+/- 3)
编码基准测试包括在堆上分配 8 字节,allocate_8
仅创建 Vec::with_capacity(8)
,以证明实际的编码过程非常非常便宜。
MIT 许可证 (MIT)
版权所有 (c) 2016 BitSparrow
特此授予任何获得本软件及其相关文档文件(“软件”)副本的任何人免费使用该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许获得软件的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论此类索赔、损害或其他责任是基于合同、侵权或其他方式,无论是在软件或其使用或其他交易中产生的。