5 个版本 (3 个破坏性更新)
0.4.1 | 2021年2月3日 |
---|---|
0.4.0 | 2021年2月3日 |
0.3.0 | 2020年6月17日 |
0.2.0 | 2020年6月17日 |
0.1.0 | 2020年6月16日 |
#1920 在 编码
每月下载量1,856次
在 12 个crate(7 个直接) 中使用
20KB
245 代码行
这个crate提供了一种便捷的方式在实现了标准 Read
或 Write
特性的缓冲区中读写字节。
支持的标准类型包括 u8
、u16
、u32
、u64
、i8
、i16
、i32
和 i64
。
这些类型的读写操作使用 byteorder
crate 实现。
安装
将以下内容添加到您的 Cargo.toml
文件中
[dependencies]
bytestream = "0.4"
示例
use std::io::{Cursor, Read, Result, Write};
use bytestream::*;
#[derive(Debug, PartialEq)]
pub struct Foo {
bar: bool,
baz: u32,
}
impl StreamReader for Foo {
fn read_from<R: Read>(buffer: &mut R, order: ByteOrder) -> Result<Self> {
Ok(Self {
bar: bool::read_from(buffer, order)?,
baz: u32::read_from(buffer, order)?,
})
}
}
impl StreamWriter for Foo {
fn write_to<W: Write>(&self, buffer: &mut W, order: ByteOrder) -> Result<()> {
self.bar.write_to(buffer, order)?;
self.baz.write_to(buffer, order)?;
Ok(())
}
}
// Create a buffer that implements the `Write` trait
let mut buffer = Vec::<u8>::new();
// Write some data to the buffer
let foo = Foo { bar: true, baz: 37 };
foo.write_to(&mut buffer, ByteOrder::BigEndian).unwrap();
// Read the data back from the buffer
// We wrap the buffer in a Cursor::<T> that implements the `Read` trait
let mut cursor = Cursor::new(buffer);
let other = Foo::read_from(&mut cursor, ByteOrder::BigEndian).unwrap();
assert_eq!(foo, other);
排除对std类型的流式支持
如果您不希望包含对std类型的开箱即用支持,您可以在 Cargo.toml
文件中排除默认功能
[dependencies]
bytestream = { Version = "0.4", default-features = false }
排除默认功能也将移除 byteorder
crate 依赖。
致谢
这个crate的灵感来源于 Stevenarella
Minecraft 客户端。
依赖项
~120KB