首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将结构化数据保存到文件中?

如何将结构化数据保存到文件中?
EN

Stack Overflow用户
提问于 2020-07-07 08:58:17
回答 2查看 6.7K关注 0票数 5

我的程序包含一个庞大的预计算和恒定的输出。我想避免在下一次运行程序时运行这个预计算。因此,我希望将它的输出保存为程序的第一次运行时的文件,并在下次运行程序时加载它。

输出包含我自己定义的非公共数据类型、对象和结构。

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-07 09:15:47

一种用于(去)序列化生锈对象的事实上的标准方法是塞德。给定锈蚀结构(或枚举),它产生中间表示,然后可以将其转换为所需的格式(例如,json)。给出一个结构:

代码语言:javascript
复制
use serde::{Serialize, Deserialize};

// here the "magic" conversion is generated
#[derive(Debug, Serialize, Deserialize)]
struct T {
    i: i32,
    f: f64,
}

您可以使用简单的oneliner来获得json表示:

代码语言:javascript
复制
let t = T { i: 1, f: 321.456 };
println!("{}", serde_json::to_string(&t).unwrap());
// prints `{"i":1,"f":321.456}`

以及转换回:

代码语言:javascript
复制
let t: T = serde_json::from_str(r#"{"i":1,"f":321.456}"#).unwrap();
println!("i: {}, f: {}", t.i, t.f);
// prints i: 1, f: 321.456

这里是一个操场链接。这是json使用的一个例子,但您可能会发现其他更合适的库,如斯博尔yaml联码xml和许多其他库。

票数 6
EN

Stack Overflow用户

发布于 2020-07-07 09:30:23

您可能希望使用类似塞德的方法来序列化数据,将其保存到磁盘,然后在下一次运行时从那里恢复数据。特别是,联码用于序列化二进制格式的数据,这比JSON或其他人类可读的格式节省了更多的空间。但是,如果更改了程序中结构的布局,则必须小心不要使用旧的序列化数据。

为了更深入地了解,我将访问Serde的文档,但基本思想是用#[derive(Serialize, Deserialize)]标记所有需要保存的结构,并使用二进制代码进行序列化/反序列化。例如,我用操场链接编写了一个serde_json (作为二进制代码在生锈操场上不可用),但是bincode没有什么不同,除了使用serializedeserialize,而不是to_vecfrom_slice

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62771576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档