8个版本 (5个重大更改)
0.6.2 | 2024年1月14日 |
---|---|
0.6.1 | 2024年1月11日 |
0.6.0 | 2023年12月24日 |
0.5.0 | 2023年11月13日 |
0.1.1 | 2023年5月19日 |
#45 in #bytes
每月下载量 122
用于 12 个crate(直接使用 6 个)
60KB
1K SLoC
动机
-
该产品的动机有两方面
-
能够通过简单的使用
derive
宏注解和属性,将通常从网络获取的byte slice &[u8]
映射到Ruststruct
数据模型中,并自动生成必要的代码。 -
当
byte slice
未使用现有的广泛可用协议进行序列化时,这非常方便。例如,一个特定应用的C-Struct。 -
成为市场上最快的字节流序列化/反序列化工具,适用于对延迟敏感的场景。以下基准测试结果展示了使用不同框架序列化/反序列化参考结构体的性能摘要
byteserde
-~15ns
读写bincode
-~15ns
读写rmp-serde
-~215ns
读写serde_json
-~600ns
读写 - 由于使用了字符串,速度较慢,可以理解- 此文档 包含基准测试的详细信息。
-
何时使用此框架以及何时避免使用
使用
-
如果你正在处理以
byte stream
格式提供数据的网络协议,而这些协议并不符合广泛可用标准,例如bincode,
protobuf》。使用此产品高效地将你的
byte stream
映射到Ruststruct
。 -
您有一个对延迟敏感的使用场景。请注意,该协议在序列化过程中不添加任何架构信息,因此与直接转储结构体内存布局而不添加填充等效。
-
以下是一些与该框架完美匹配的协议示例。
避免
- 如果使用广泛可用的标准对
字节流
进行序列化或反序列化,请避免使用此框架,而是使用相应的标准来处理字节流
该项目包含三个craits
[email protected] - byteserde_derive/Cargo.toml
- 包含生成[email protected]特质的derive宏
-
#[derive(ByteSerializeStack)]
- 生成ByteSerializeStack特质 -
#[derive(ByteSerializeHeap)]
- 生成ByteSerializeHeap特质 -
#[derive(ByteDeserializeSlice)]
- 生成ByteDeserializeSlice特质 -
#[derive(ByteSerializedSizeOf)]
- 生成ByteSerializedSizeOf特质 - 该特质提供了一个关联方法byte_size()
,它返回一个字节大小的结构体内存大小(无对齐)。然而,它不支持堆分配的类型,例如Vector、String或它们的派生类型。 -
#[derive(ByteSerializedLenOf)]
- 生成ByteSerializedLenOf特质 - 该特质提供了一个实例方法byte_len(&self)
,它返回特定实例的字节大小(无对齐)。它专门用于处理ByteSerializedSizeOf特质
不支持的情况。
-
- 更多示例请参阅此处
- 注意:Union和Unit结构不支持,但将来可能会改变。
[email protected] - byteserde/Cargo.toml
- 亮点
-
ByteSerializerStack
<CAP>
- 提供超快的序列化器,将数据序列到预分配的栈上byte array
[u8; CAP]
,因此得名。这个实用程序在达到预分配字节数组的边界时,序列化将失败。它提供重置功能,将内部计数器移至开始处,允许您多次回收缓冲区。- 适用于实现ByteSerializeStack trait的
struct
。
- 适用于实现ByteSerializeStack trait的
-
ByteSerializerHeap - 提供足够快的序列化器,通过将数据序列到
byte vector
Vec<u8>
,因此得名。这个实用程序以一些性能为代价,避免了在预先不知道最大的struct
大小时需要担心。- 适用于实现ByteSerializeHeap trait的
struct
。
- 适用于实现ByteSerializeHeap trait的
-
ByteDeserializerSlice - 接受
byte stream
&[u8]
,无论堆还是栈分配,将其转换为struct
。- 适用于实现ByteDeserializeSlice
<T>
trait的struct
。
- 适用于实现ByteDeserializeSlice
-
[email protected] - byteserde_types/Cargo.toml
- 包含可选的ASCII字符串相关类型和宏,通常在解析字节流时处理固定长度字符串时很有用,有关更多详细信息,请参阅示例部分。
示例 & 概述
- 请参阅此文档,其中包含大量综合示例和功能概述。
依赖项
~285–740KB
~18K SLoC