#buffer #zero-copy #io #networking #endianness

bytes-quilt

提供了一种追踪对缓冲区随机访问写入的数据结构

1个不稳定版本

0.1.0 2023年8月25日

#1989数据结构

Apache-2.0

21KB
414

BytesQuilt

BytesQuilt是一个Rust库,它提供了一种高效灵活的方式来处理二进制数据缓冲区。它允许您以任意顺序写入字节,并高效地重新组装整个二进制缓冲区而无需复制任何数据。

特性

  • 高效字节管理:BytesQuilt内部使用Bytes包来处理底层缓冲区,确保高效内存管理和最佳性能。

  • 部分写入跟踪:BytesQuilt允许您跟踪缓冲区哪些部分已被写入。这提供了对缓冲区写入进度的可见性。

  • 未读部分查询:BytesQuilt允许您查询尚未接收的缓冲区部分。这种能力允许进行针对性的数据检索,有助于实现高效的数据处理工作流程。

  • 快速插入与二分搜索:BytesQuilt支持使用二分搜索快速将数据插入到缓冲区的任何部分,以高效定位正确的区域。

  • 无缝组装:BytesQuilt保持细致的账目信息,使得无需复制即可重新组装整个二进制缓冲区。这种方法最小化了内存开销并保持了性能。

入门指南

要在您的Rust项目中使用BytesQuilt,只需将以下行添加到您的Cargo.toml文件中

[dependencies]
bytes-quilt = "<version>"

请确保将<version>替换为您想要使用的适当版本,并遵循语义版本控制指南。

用法

以下是一个简单的示例,演示了如何使用BytesQuilt(注意,一些展示的API可能是预期的,可能尚未实现)

use bytesquilt::BytesQuilt;

fn main() {
    // Create a new BytesQuilt instance
    let mut quilt = BytesQuilt::new();

    // Write bytes to the quilt
    quilt.put_u8_at(32, 0x04);
    quilt.put_bytes_at(0, 0x01, 2);
    quilt.put_at(16, &[0x02, 0x03]);
    quilt.put_u32(40, 0x05);

    // Reassemble the buffer
    let buffer = quilt.into_inner();

    // Use the buffer as needed
    println!("Buffer: {:?}", buffer);
    // Buffer: [0x01, 0x01, 0x02, 0x03, 0x04, 0x05]
}

有关更多详细信息和高阶用法示例,请参阅文档

贡献

欢迎为BytesQuilt做出贡献!如果您遇到任何问题,有建议,或希望贡献新功能或改进,请提交问题或提交拉取请求。

提交拉取请求时,请遵循贡献指南

许可

© Zefira Shannon | 2022-2023

本文件遵循Apache License 2.0版本(《许可协议》);除非遵守许可协议,否则不得使用此文件。您可以在以下网址获取许可协议的副本:https://apache.ac.cn/licenses/LICENSE2.0

除非适用法律要求或书面同意,否则在许可协议下分发的软件按“现状”基础分发,不提供任何形式的保证或条件,无论是明示的还是默示的。有关许可协议下许可和限制的具体语言,请参阅许可协议。

依赖项

~0.5–1MB
~21K SLoC