这段代码完全按照我的意愿序列化一个 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()
获取没有长度前缀的字节。