如何在不分配的情况下读取跳过 N 个字节?

pur*_*tii 4 rust

我想在使用实例时跳过任意数量的字节Read而不进行任何分配。跳过之后,我需要继续阅读后面的数据。

字节数在编译时未知,因此我无法创建固定数组。Read也没有跳过,所以我似乎需要阅读一些内容。我不想使用BufReader和分配不必要的缓冲区,也不想逐字节读取,因为这样效率低下。

还有其他选择吗?

She*_*ter 5

你最好的选择是还要求Seek

use std::io::{self, Read, Seek, SeekFrom};

fn example(mut r: impl Read + Seek) -> io::Result<String> {
    r.seek(SeekFrom::Current(5))?;

    let mut s = String::new();
    r.take(5).read_to_string(&mut s)?;

    Ok(s)
}

#[test]
fn it_works() -> io::Result<()> {
    use std::io::Cursor;

    let s = example(Cursor::new("abcdefghijklmnop"))?;
    assert_eq!("fghij", s);
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

如果您无法使用Seek,请参阅当未实现 Seek 时如何通过 std::io::Read 特征中的数据前进?

也可以看看:


归档时间:

查看次数:

2720 次

最近记录:

6 年,1 月 前