【问题标题】:How to convert IoSliceMut array into Vec<u8>?如何将 IoSliceMut 数组转换为 Vec<u8>?
【发布时间】:2021-03-27 05:32:07
【问题描述】:
let mut buffer = Vec::with_capacity(10);
stream.read_vectored(&mut buffer);

上面的代码将buffer 转换为IoSliceMut 向量,但我不知道如何从该向量中读取或如何将其转换回Vec&lt;u8&gt;

【问题讨论】:

  • 除非您使用了原始的u8 向量,否则它不会发生任何事情,read_vectored 是引用原始stream 的一种方式。当buffer 超出范围时,就像所有引用都消失了,您可以像往常一样使用原始数据
  • 要读取您迭代 buffer 的数据,您可以将 Deref 每个 IoSliceMut 转换为 u8 的一部分,还有 plenty of methods 可以读取这些数据。
  • @AlexLarionov 感谢您的意见,我会立即调查。

标签: arrays vector rust buffer slice


【解决方案1】:

您不必将IoSliceMut 结构转换回u8 数组,read_vectored 将字节直接写入数组缓冲区,因为您通过可变引用传递它们。之后您可以只使用缓冲区,它们会将数据写入其中。示例:

use std::io::IoSliceMut;
use std::io::Read;

fn main() {
    let mut buffer: [u8; 10] = [0; 10];
    let mut io_slices = [IoSliceMut::new(&mut buffer)];
    let mut data: &[u8] = &[1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    data.read_vectored(&mut io_slices);
    dbg!(data, buffer); // data is now in buffer
}

playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2020-10-28
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多