在向量中复制二进制文件

mal*_*loc 1 rust

我试图通过编写一个模拟器来熟悉 Rust(并学习它)。我需要将一个文件(我的 rom 图像)加载到一个向量中,即我的模拟 ram。

这是我的代码:

let image = std::fs::read(filepath).ok().unwrap();
let mut i = 0;
for n in image {
    self.memory[400 + i] = n;
    i += 1;
}
Run Code Online (Sandbox Code Playgroud)

memory 是Vec<u8>用全零 ( memory: vec![0; 4*1024])初始化的。现在有了这个代码我就可以了,它可以满足我的要求,但是我有更好(更快/更紧凑)的方法来做到这一点吗?

use*_*342 5

我有更好(更快/更紧凑)的方法来做到这一点吗?

是的。std::fs::read是一个方便的函数,它分配一个缓冲区并将数据读入其中,并在数据到达时增长它。由于您已经拥有一个预先分配的向量并且不想调整大小,因此您可以使用BufRead::read直接读入它而无需进行不必要的分配。如果您的 ROM 大小是固定的,您可以通过一次调用读取数据read_exact

let mut file = BufReader::new(File::open(filepath)?);
file.read_exact(&mut self.memory[400..400 + ROM_SIZE])?;
Run Code Online (Sandbox Code Playgroud)

这将避免不必要的分配和复制。当然,在许多情况下,它不会在实践中产生影响,但由于您的目标是学习,因此了解最有效的方法是有意义的。