#binary-data #read-write #byte-buffer #binary #byte #read #write

bytestream

提供了一种便捷的将二进制数据写入缓冲区的方法

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编码

Download history 625/week @ 2024-03-13 290/week @ 2024-03-20 455/week @ 2024-03-27 342/week @ 2024-04-03 397/week @ 2024-04-10 997/week @ 2024-04-17 815/week @ 2024-04-24 633/week @ 2024-05-01 546/week @ 2024-05-08 969/week @ 2024-05-15 543/week @ 2024-05-22 250/week @ 2024-05-29 394/week @ 2024-06-05 426/week @ 2024-06-12 479/week @ 2024-06-19 519/week @ 2024-06-26

每月下载量1,856次
12 个crate(7 个直接) 中使用

MIT 许可证

20KB
245 代码行

这个crate提供了一种便捷的方式在实现了标准 ReadWrite 特性的缓冲区中读写字节。

支持的标准类型包括 u8u16u32u64i8i16i32i64

这些类型的读写操作使用 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