rust - 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()
获取没有长度前缀的字节。
解决方案
推荐阅读
- react-native-android - 在 React-Native Android 应用程序中使用 3rd Party AAR
- reactjs - cypress input field wont get cleared
- python - Insert list in sqlite table with django
- rest - JWT Token generation in Grails with Preauthentication
- html - (Noob Question) Why is checking if the user is the author of a blog post completely different in .py and .html files?
- docker - Docker, Volumes vs Bind Mounts for persistent data such as DB, elasticsearch?
- c# - RectangleF 包含总是返回 false
- git - 无法使替换参考“永久”
- javascript - MongoConnect 作为回调传入客户端
- java - 通过单个端点将字符串数据和文件发送到基于 spring 的服务器