从具有不同长度的向量中获取可变切片?

Aug*_*ack 3 rust

我试图用一个向量作为缓冲这样的,我想知道是否有一种方法可以采取从载体片没有增长它,所以像这样的工作,代码:

fn example(r: Read) {
    let buffer: Vec<u8> = Vec::with_capacity(1024);
    let slice: &mut[u8] = &mut buffer;
    r.read(slice); // doesnt work since the slice has length zero
}
Run Code Online (Sandbox Code Playgroud)

Vee*_*rac 5

如果只占用一部分容量,那么您将拥有一片未初始化的数据。这是不安全的。

可以使用Vecset_len。然而

这样做的基本方法是

unsafe {
    buffer.set_len(buffer.capacity());
    let new_len = try!(r.read(slice));
    buffer.set_len(cmp::min(buffer.len(), new_len));
}
Run Code Online (Sandbox Code Playgroud)

cmp::min,如果你不完全信任是需要read的实现,因为不正确的输出可能会导致过大的设定长度。

  • 我建议`Vec.resize(capacity,0)`,因为它安全又容易。仅在确实需要绝对最大速度的情况下,才转向不安全的版本。 (2认同)