我正在使用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。
我在bincode文档中看到related remark,但我不明白如何使用它。
答案 0 :(得分:3)
具有固定大小的切片
[u8; 16]
不 切片。它是数组,可以强制切片。
无论如何......我不相信你可以。重要功能似乎是Serializer::serialize_fixed_size_array
current serializer未实现。这意味着它默认行为与切片相同。
由于切片在编译时没有已知的长度,因此在序列化时必须写入它们的大小。
如果没有其他人可以提供更好的建议,那么可能维护者可以找到实现这一目标的方法。您可能需要礼貌地向维护者询问此功能或提议以帮助完成工作。
除此之外,听起来你正试图让bincode输出适合预先存在的格式。这真的没有意义; bincode是它自己的格式,已经做出了各种选择和权衡。
如果需要,您可以实现自己的编码器/解码器(使用serde或不使用serde)。如果您担心文件大小,也可以将bincode与压缩步骤结合起来。