当前位置: 首页 > news >正文

Rust语言序列化和反序列化vec<u8>,serde库Serialize, Deserialize,bincode库(2025年最新解决方案详细使用)

1、Cargo.toml 配置

[dependencies]
serde = { version = "1.0.219", features = ["derive"] }
bincode = "2.0.1"

2、引入库

use serde::{Serialize, Deserialize}; 
use bincode::{config, Encode, Decode}; 
use serde::de::DeserializeOwned; 
  1. serde库:序列化(Serialize)和反序列化(Deserialize)特性
  2. bincode库:配置项和编解码特性
  3. DeserializeOwned:用于泛型反序列化

3、序列化函数

  • 将任意实现了SerializeEncode的类型转换为字节向量
pub fn my_serialize<T: Serialize + Encode>(data: &T) -> Vec<u8> {bincode::encode_to_vec(data, config::standard()).unwrap()
}
  1. config::standard() - 获取bincode标准配置
  2. encode_to_vec - 使用标准配置将数据编码为Vec<u8>
  3. unwrap() - 解包Result,若失败则panic

4、反序列化函数

  • 从字节切片还原数据(要求类型同时满足DeserializeOwnedDecode
pub fn my_deserialize<T: DeserializeOwned + Decode<()>>(bytes: &[u8]) -> T {bincode::decode_from_slice(bytes, config::standard()).map(|(res, _)| res).unwrap()
}
  1. decode_from_slice - 使用标准配置解码字节切片
  2. map(|(res, _)| res) - 提取元组中的第一个元素(解码结果)
  3. unwrap() - 解包Result

5、定义Person结构体并自动派生多个trait实现

#[derive(Deserialize, Serialize, Encode, Decode, Debug)]
struct Person {name: String,  // 可序列化的字符串字段age: u8,       // 可序列化的无符号8位整数字段
}

关键点说明:

  1. Serialize + Encode 组合确保类型可被bincodeserde同时序列化
  2. DeserializeOwned + Decode<()> 中的Decode<()>表示使用默认解码参数
  3. decode_from_slice返回(T, usize)元组,其中usize是消耗的字节数
  4. 结构体派生宏自动生成对应trait的实现代码

5、使用

let person = Person { name: "Alice".into(), age: 30 };
let bytes = my_serialize(&person);
let decoded: Person = my_deserialize(&bytes);
http://www.dtcms.com/a/321482.html

相关文章:

  • AI 智能体框架:LlamaIndex
  • 国内如何使用体验到GPT-5呢?附GPT快速升级Plus计划保姆级教程
  • 大模型量化上溢及下溢解析
  • 达梦DMFLDR导出和导入的方法
  • 以任务为中心的智能推荐系统架构设计:原理、实现与挑战分析
  • 深入理解Java集合框架:核心接口、实现类与实战选择
  • Vue2中,Promise.all()调用多个接口的用法
  • Numpy科学计算与数据分析:Numpy文件操作入门之数组数据的读取和保存
  • 智慧社区(十)——声明式日志记录与小区地图功能实现
  • 解决MinIO上传图片后返回URL无法访问的问题
  • Linux 启动流程实战:Device Tree 全解析与驱动绑定机制
  • 【LLM实战】RAG高级
  • 从0到1开发剧本杀小程序:全流程指南与避坑指南
  • 使用 C# 通过 .NET 框架开发应用程序的安装与环境配置
  • 网吧在线选座系统|基于java和小程序的网吧在线选座小程序系统设计与实现(源码+数据库+文档)
  • [202403-E]春日
  • 小程序难调的组件
  • 悬赏任务系统网站兼职赚钱小程序搭建地推抖音视频任务拉新源码功能详解二开
  • LangChain学习笔记05——多模态开发与工具使用
  • react+echarts实现变化趋势缩略图
  • LabVIEW数字抽取滤波
  • 点播服务器
  • RabbitMQ 中无法路由的消息会去到哪里?
  • Spring AMQP 入门与实践:整合 RabbitMQ 构建可靠消息系统
  • Android12 Framework Sim卡pin与puk码解锁
  • 用LaTeX优化FPGA开发:结合符号计算与Vivado工具链(二)
  • Nature论文-预测和捕捉人类认知的基础模型-用大模型模拟人类认知
  • 麦芽:寻常食材的中医智慧 多炮制方式各显养生价值
  • 动态规划进阶:转移方程优化技巧全解
  • 安卓应用内WebView页面调试技巧