6个版本
0.2.3 | 2019年7月8日 |
---|---|
0.2.2 | 2019年7月5日 |
0.2.1 | 2019年5月28日 |
0.1.0 | 2019年5月19日 |
0.0.0 | 2019年5月14日 |
#2275 in 编码
850 monthly downloads
在 5 个crate中使用 (直接使用2个)
48KB
934 行
byteio
字节I/O抽象。关于
byteio
是一个简单的crate,它公开了对连续内存切片进行读写操作轻量级抽象。
在核心上,byteio
没有什么新的。它提供的许多功能在其他地方也可以找到,例如 std::io
、byteorder
和 bytes
。它提供的是
- 一流的
no_std
支持。 - 与底层缓冲区寿命相关的读取。
该crate基于两个核心特质:ReadBytes
和 WriteBytes
。两个扩展特质还添加了读取和写入数字的功能,并为实现了核心特质的任何类型提供了泛型实现。
安装
要开始使用 byteio
,请将其添加到您的 Cargo.toml
,如下所示
[dependencies]
byteio = "0.2"
默认情况下,这将激活 std
功能,它启用了仅在用标准库编译时才可用的crate中的功能。
要在一个 no_std
环境中使用该crate,您只需禁用此功能。这可以通过调整您的 Cargo.toml
来完成
[dependencies]
byteio = { version = "0.2", default-features = false }
该crate还有一个最终功能:alloc
。当您在一个 no_std
环境中构建,有一个分配器,并希望使用与 Vec<u8>
一起工作的功能时,应使用此功能。您可以通过再次调整您的 Cargo.toml
来激活此功能
[dependencies]
byteio = { version = "0.2", default-features = false, features = ["alloc"] }
用法
手动序列化和反序列化一个简单的网络数据包
use std::convert::TryInto;
use byteio::prelude::*; // ReadBytes, ReadBytesExt, WriteBytes, WriteBytesExt
/// A packet whose payload is encoded as `[n_msb, n_lsb, b_0, b_1, ..., b_n-1]`.
struct Packet<'a> {
payload: &'a [u8],
}
impl<'a> Packet<'a> {
fn decode<R: ReadBytes<'a>>(mut reader: R) -> byteio::Result<Self> {
let len: usize = reader.try_read_u16_be()?.into();
let payload = reader.try_read_exact(len)?;
Ok(Self { payload })
}
fn encode<W: WriteBytes>(&self, mut writer: W) -> byteio::Result<()> {
let len: u16 = self.payload.len().try_into().unwrap_or_else(|_| !0);
writer.try_write_u16_be(len)?;
writer.try_write_exact(&self.payload[..usize::from(len)])?;
Ok(())
}
}
fn main() -> byteio::Result<()> {
let data = b"\x00\x0Chello, world";
let packet = Packet::decode(&data[..])?;
assert_eq!(packet.payload, b"hello, world");
let mut buf = Vec::new();
packet.encode(&mut buf)?;
assert_eq!(&*buf, data);
Ok(())
}
许可
该项目受以下任一协议的双重许可
- Apache许可证,版本2.0,(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
由您选择。
贡献
如果您想为byteio
做出贡献,遇到任何问题,或者甚至有您希望实现的功能,欢迎提交新问题和拉取请求。
除非您明确表示否则,您提交给byteio
的任何有意贡献,根据Apache-2.0许可证定义,应如上双授权,不附加任何额外条款或条件。