gpt4 book ai didi

rust - 如何在不使用大量内存的情况下将所有stdin写入stdout?

转载 作者:行者123 更新时间:2023-12-03 11:41:45 28 4
gpt4 key购买 nike

我想编写一个Rust程序,将stdin中的所有内容复制到stdout中。到目前为止,我有这个

fn main() {
let mut stdin: io::Stdin = io::stdin();
let mut stdout: io::Stdout = io::stdout();

let mut buffer: [u8; 1_000_000] = [0; 1_000_000];
let mut n_bytes_read: usize = 0;
let mut uninitialized: bool = true;
while uninitialized || n_bytes_read > 0
{
n_bytes_read = stdin.read(&mut buffer).expect("Could not read from STDIN.");
uninitialized = false;
}
}
我会将所有内容复制到大小为一百万的缓冲区中,以免在有人向我的程序提供3 GB的文件时不占用内存。所以现在我想将其复制到stdout,但是我能找到的唯一原始写操作是 stdout.write(&mut buffer)-但这写了整个缓冲区!我需要一种方法来写入特定数量的字节,例如 stdout.write_only(&mut buffer, n_bytes_read)
我想以最基本的方式做到这一点,并尽量减少标准库的导入。

最佳答案

如果您只想从stdin复制到stdout而不占用太多内存,则只需使用std::io::copy即可。它将数据从读取器流向写入器。
如果您的目标是编写缓冲区的一部分,请对该缓冲区进行切片,然后将其传递给write:

stdout.write(&buffer[0..n_bytes_read]);
切片不会复制数据,因此您将不再使用任何内存。
但是请注意, write可能不会写入您所要求的所有内容-它返回实际写入的字节数。如果使用 write_all,它将写入整个切片。

关于rust - 如何在不使用大量内存的情况下将所有stdin写入stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63291966/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com