gpt4 book ai didi

serialization - 如何使用二进制代码序列化没有长度的切片?

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

我正在使用 bincode crate 将结构写入文件。该结构包含一个固定大小的切片。如何强制 bincode 只写入切片的内容而不写入切片的长度?

#![allow(unstable)]
#![feature(custom_derive, plugin)]
#![plugin(serde_macros)]

extern crate serde;
extern crate bincode;

use std::fs::File;
use bincode::serde::serialize_into;
use bincode::SizeLimit;

#[derive(Serialize)]
struct Foo([u8; 16]);

fn main() {
let data = Foo([0; 16]);
let mut writer = File::create("test.bin").unwrap();
serialize_into::<File, Foo>(&mut writer, &data, SizeLimit::Infinite).unwrap();
}

文件“test.bin”的大小为 24 字节而不是 16。

我看到了related remark在二进制代码的文档中,但我不明白如何使用它。

最佳答案

a slice with a fixed size

[u8; 16] 不是切片。它是一个数组,可以被强制转换为一个切片。

无论如何...我不相信你可以。重要的功能似乎是 Serializer::serialize_fixed_size_array current serializer 未实现.这意味着它的默认行为与切片相同。

由于切片在编译时不知道长度,因此在序列化时必须写入它们的大小。

如果没有其他人可以提供更好的建议,维护者可能可以找到实现这一目标的方法。您可能想礼貌地向维护者询问此功能或提供帮助完成这项工作。


除此之外,听起来您正在尝试使 bincode 输出适合预先存在的格式。那真的没有意义; bincode 是它自己的格式,并且已经做出了各种选择和权衡。

如果需要,您可以实现自己的编码器/解码器(使用或不使用 serde)。如果您担心文件大小,您也可以将 bincode 与压缩步骤结合使用。

关于serialization - 如何使用二进制代码序列化没有长度的切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38424590/

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