我想在Read
不做任何分配的情况下跳过实例时跳过任意数量的字节。跳过后,我需要继续读取下面的数据。
编译时不知道字节数,因此无法创建固定数组。Read
也没有跳过,所以我需要阅读一些内容。我不想使用BufReader
和分配不必要的缓冲区,也不想逐字节读取,因为这样效率低下。
还有其他选择吗?
最好的选择是还要求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(())
}
如果您不能使用Seek
,那么请参见未实现Seek时如何从std :: io :: Read特质浏览数据?
也可以看看:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句