我想将数据序列化到缓冲区中,但不是从第一个字节开始,所以我尝试将切片传递给序列化器。
如果你像这样传递整个
Vec
,序列化器就会工作:
let mut buffer = Vec::new();
let mut serializer = Serializer::new(&mut buffer);
但是如果你传递一个切片,它就无法序列化,因为它的长度为零
let mut buffer = Vec::new();
let mut serializer = Serializer::new(&mut buffer[..]);
我可以通过调整缓冲区大小来修复序列化器,如下所示:
let mut buffer = Vec::new();
buffer.resize(20, 0);
let mut serializer = Serializer::new(&mut buffer[..]);
但是我无法弄清楚串行器向缓冲区写入了多少字节。
我感觉我失去了一些东西。我是否需要自定义实现
Write
特征才能实现此目的?
我明白了这一点,而且实际上已经非常接近了。
重要的部分是序列化器附加到缓冲区,因此如果您先调整缓冲区大小,然后将其传递给序列化器,它将附加序列化。
这有效,并开始在第 9 个字节写入序列化数据:
let mut buffer = Vec::new();
buffer.resize(8, 0);
let mut serializer = Serializer::new(&mut buffer);