gpt4 book ai didi

serialization - 如何在二进制编码文件中的不同记录之间添加分隔符?

转载 作者:行者123 更新时间:2023-11-29 08:15:57 27 4
gpt4 key购买 nike

我有以下结构

struct Employee {
id: u64,
name: String,
}

我用下面的代码序列化它,然后将序列化的字节数组写入一个文件:

let emp = Employee {
id: 1546,
name: "abcd".to_string(),
};

let mut file = OpenOptions::new()
.read(true)
.write(true)
.create(true)
.open("hello.txt")
.unwrap();

let initial_buf = &bincode::serialize(&emp).unwrap();

println!("Initial Buf: {:?}", initial_buf);

file.write(&initial_buf);
file.write(&[b'\n']);
file.flush();

file.seek(SeekFrom::Start(0)).unwrap();

let mut final_buf: Vec<u8> = Vec::new();

let mut reader = BufReader::new(file);

reader.read_until(b'\n', &mut final_buf).unwrap();

println!("Final Buf: {:?}", final_buf);

我得到以下输出:

Initial Buf: [10, 6, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100]
Final Buf: [10]

最佳答案

Bincode 的契约(Contract)是你给它一个序列化的值,它返回给你字节。合约不保证你取回的字节不能包含换行符。

在您的数据中,整数 1546 是 0x60A,表示为字节 [10, 6, 0, 0]

您应该能够在没有任何分隔符的情况下使用 Bincode 数据。 bincode::deserialize_from函数将知道在哪里停止阅读。

关于serialization - 如何在二进制编码文件中的不同记录之间添加分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50216574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com