将 Vec<u8> 包装到某个东西上,这将实现 BufRead + Seek

问题描述 投票:0回答:1

我想使用 sdp

 板条箱解析存储在 Vec
中的 SDP 消息。我发现这个函数可以做到这一点:

pub fn unmarshal<R>(reader: &mut R) -> Result<Self>
where
    R: io::BufRead + io::Seek { ... }

但是我不知道如何创建一个可以从 Vec 实现 Seek 和 BufRead 的阅读器。我希望有一些标准库,但我是 rust 的新手,我对它不熟悉。

我成功地从 vec 创建了 BufReader:

let body: Vec<u8> = ....;
let mut reader = BufReader::new(body.as_slice());

但它似乎没有实现 Seek 特性。

let sdp = SessionDescription::unmarshal(&mut reader);

错误:

the trait bound `&[u8]: std::io::Seek` is not satisfied
the trait `std::io::Seek` is implemented for `std::io::BufReader<R>`
required for `std::io::BufReader<&[u8]>` to implement `std::io::Seek`
rust buffer reader sdp
1个回答
0
投票

std::io::Cursor
包装了实现
AsRef<[u8]>
的任何内容(包括字节切片、对字节切片的引用、
Vec<u8>
等)并提供
Read
Seek
实现(对字节切片的常规引用 (
&[u8]
) ,而不是
[u8]
)仅实施
Read
,因为他们无法维持“当前位置”)。

© www.soinside.com 2019 - 2024. All rights reserved.