我想在使用实例时跳过任意数量的字节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(())
}
Run Code Online (Sandbox Code Playgroud)
如果您无法使用Seek,请参阅当未实现 Seek 时如何通过 std::io::Read 特征中的数据前进?
也可以看看:
| 归档时间: |
|
| 查看次数: |
2720 次 |
| 最近记录: |