io - 未实现 Seek 时如何从 std::io::Read 特性中推进数据?

标签 io rust

当输出内容不重要时,从实现 std::io::Read 特性的类型中读取的最佳方法是什么?

我看到的可能选项是:

  • 循环读取单个字节。
  • 分配一个可能很大的向量并读入它。
  • 介于两者之间...在循环中读入固定大小的缓冲区

前两个选项似乎不太理想,第三个还可以但不方便。

Rust 是否提供了一种方便的方法来实现这一点?

最佳答案

您可以使用 io::copy() , Read::take()io::sink()丢弃特定数量的字节:

let mut file = File::open("foo.txt").unwrap();

// Discard 27 bytes
io::copy(&mut file.by_ref().take(27), &mut io::sink());

// Read the rest
let mut interesting_contents = Vec::new();
file.read_to_end(&mut interesting_contents).unwrap();

( Playground )

在这里,我们还必须使用by_ref()以便之后仍能使用该文件。

关于io - 未实现 Seek 时如何从 std::io::Read 特性中推进数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42243355/

相关文章:

rust - 参数类型可能不够长(使用线程)

pointers - 将具有多个变量的结构写入单个字节数组

java - Java中如何将输入流连接到输出流?

c++ - 是否保证 std::char_traits<char>::to_int_type(c) == static_cast<int>(c)?

java - 从 JAR 中获取文件

rust - `expected reference, found integral variable` 从 BTreeMap 访问一个值

mysql - Zen Cart 对数据库的写入过多。可能的解决方案?

logging - Log4Net RollingFileAppender 不会用低容量日志刷新 IO 缓冲区

rust - Rust reqwest示例json代码无法编译

rust - rust :构建包含外部C库的静态链接二进制文件