将序列化对象附加到单个文件并加载 Rust

问题描述 投票:0回答:1

我需要创建一个结构,将对象序列化为字节并附加到单个文件,然后加载它。

  1. 将结构序列化为字节并附加到文件的惯用方法是什么? 我可以这样做吗:
fn serialize_and_save<T: Serialize> (file:&mut File, value:T) {
    let encoded = bincode::serialize(value)?;

    file.write_all(&encoded)?; // the file may have some T objects already

    Ok(())
}
  1. 如何加载包含多个对象字节的文件并反序列化它们?
rust serialization
1个回答
0
投票

您可以在此处使用许多序列化格式。为了满足您的这两个问题,您需要一种序列化格式,其中可以唯一确定条目的结尾,以便可以从流中读取下一项。我不相信 Bincode 在一般情况下是这样的格式。

但是,使用标准格式 CBOR 的

serde_cbor_2
crate 确实通过其
StreamDeserializer
结构满足了这一需求。
serde_json
也为 JSON 提供了这样的结构,但 JSON 通常更冗长并且不太适合字节字符串。

当然,您还可以使用许多其他格式,但是通过使用 CBOR 或 JSON 等标准,您可以增加与其他实现兼容的可能性以及良好的高性能序列化器实现的可用性。

© www.soinside.com 2019 - 2024. All rights reserved.