首页 > 解决方案 > serde/bincode 如何序列化字节数组?

问题描述

这段代码完全按照我的意愿序列化一个 32 字节的数组:

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
struct Hash([u8; 32]);

let hash = Hash([1u8; 32]);
let hash_bin = bincode::serialize(&hash).unwrap();
assert_eq!(hash_bin, [1u8; 32]);

它是如何工作的?

根据https://serde.rs/impl-serializer.html有一个serialize_bytes()函数,但是 bincode 版本在数据前面加上了一个长度。

fn serialize_bytes(self, v: &[u8]) -> Result<()> {
    O::IntEncoding::serialize_len(self, v.len())?;
    self.writer.write_all(v).map_err(Into::into)
}

代码(进一步在上面)调用序列化中的什么函数,将 32 个字节序列化为没有长度前缀的自身?


上下文:我正在为一种类型实现客户序列化,并且我希望它(在某些情况下)序列化字节数组,以便 bincode 将它们编码为没有长度前缀的字节。这是一个问题,因为调用serialize_bytes()添加了长度前缀。

我想了解默认情况下如何序列化字节数组,因为我不知道要调用哪个方法来代替serialize_bytes()获取没有长度前缀的字节。

标签: rustserdebincode

解决方案


推荐阅读