#byte-buffer #buffer #byte #endian #io #utility

mmap_bytey

Mmap Bytey提供了一种方便且易于使用的字节存储

5个版本

0.2.0 2024年5月2日
0.1.3 2024年5月1日
0.1.2 2024年5月1日
0.1.1 2024年5月1日
0.1.0 2024年5月1日

#1557 in 编码

Download history 297/week @ 2024-04-30 1/week @ 2024-05-14 8/week @ 2024-05-21

每月101次下载

MIT/Apache

120KB
2.5K SLoC

Mmap Bytey

Mmap-rsBytey的缓冲区分配版本。这是为了创建可重用的缓冲区以降低分配。唯一的缺点是所有缓冲区都限制为每个缓冲区1536字节的静态大小。这些缓冲区不会调整大小,后端分配器将存储旧的缓冲区分配以供直接重用。我们选择1536字节,因为它接近mtu数据的最小大小。

📑 文档

文档链接可在此处找到。

🚨 帮助

如果您需要关于此库的帮助或有建议,请访问我们的Discord群组

📦 安装

要开始使用此crate,您只需将其添加到您的Cargo.toml

[dependencies]
mmap_bytey = "0.1.0"

🔎 使用

use mmap_bytey::MByteBuffer;

fn main() {
    let mut buffer = MByteBuffer::new().unwrap();

    let value1: u16 = 1234;
    let value2: i32 = -2000;
    let value3: usize = usize::MAX;

    // Initially the buffer will have a size of 8 bytes, unless you create the buffer using the with_capacity method
    // The buffer will resize itself to fit all data inside of it
    buffer.write(&value1);
    buffer.write(&value2);
    buffer.write(&value3);

    // When you write a value to the buffer, the cursor will move along
    // So if we want to read the values we just put in, we have to move it back to 0
    buffer.move_cursor(0);

    // Read and print the values stored inside the buffer
    println!("{}", buffer.read::<u16>().unwrap()); // prints "1234"
    println!("{}", buffer.read::<i32>().unwrap()); // prints "-2000"
    println!("{}", buffer.read::<usize>().unwrap()); // prints what the MAX is for usize on the system
}

写入ByteBuffer的任何值都必须实现MByteBufferWrite特质。默认情况下,此特质已在所有数值原始类型(u8, u16, i8, i16等)上实现。

从ByteBuffer读取类型需要该类型实现MByteBufferRead特质,这已在默认情况下实现在所有数值原始类型上。

如果您想看到更多这些特质的默认实现,请通过GitHub上的问题告知我!

💿 宏

Bytey包含两个与特质同名(MByteBufferWriteMByteBufferRead)的derive宏,您可以使用这些宏来对您自己的结构和枚举进行操作。

use mmap_bytey::{MByteBuffer, MByteBufferRead, MByteBufferWrite};

fn main() {
    #[derive(MByteBufferRead, MByteBufferWrite, Debug, PartialEq)]
    struct Test {
      a: u8,
      b: u16,
      c: isize,
    }

    let mut buffer = MByteBuffer::new().unwrap();
    let val = Test { a: 1, b: 2, c: 3 };

    buffer.write(&val);
    buffer.move_cursor(0);

    assert_eq!(val, buffer.read::<Test>().unwrap());
}

请注意,结构或枚举内的所有字段都必须实现该特质,否则您将得到错误。

😎 贡献

请随意通过发送pull请求来贡献。对于重大更改或如果您有可以帮助改进Mmap Bytey或Bytey的想法,请打开一个问题!

请确保您如果进行贡献,测试也相应更新。

依赖项

~4–30MB
~452K SLoC