gpt4 book ai didi

rust - 如何直接将有限字节从读取器复制到写入器

转载 作者:行者123 更新时间:2023-11-29 08:01:24 25 4
gpt4 key购买 nike

<分区>

我试图编写一个函数,将用户指定的字节数从读取器复制到写入器,我想到了这个:

fn io_copy(
reader: &mut std::io::Read,
writer: &mut std::io::Write,
byte_count: usize,
) -> std::io::Result<()> {
let mut buffer: [u8; 16384] = unsafe { std::mem::uninitialized() };
let mut remaining = byte_count;
while remaining > 0 {
let to_read = if remaining > 16384 { 16384 } else { remaining };

reader.read_exact(&mut buffer[0..to_read])?;
remaining -= to_read;
writer.write(&buffer[0..to_read])?;
}

Ok(())
}

它工作正常,但我想在没有任意大小的中间缓冲区的情况下完成它,我想知道这样的函数是否已经存在。我找到了 std::io::copy ,但这会复制整个流,而我只想复制有限的数量。我想我可以在阅读器上使用 take,但我无法消除错误。这是我目前所拥有的:

fn io_copy<R>(reader: &mut R, writer: &mut std::io::Write, byte_count: usize) -> std::io::Result<()>
where
R: std::io::Read + Sized,
{
let mut r = reader.by_ref().take(byte_count as u64);
std::io::copy(&mut r, writer)?;
Ok(())
}

这给了我一个错误:

error[E0507]: cannot move out of borrowed content
--> src/lib.rs:6:21
|
6 | let mut r = reader.by_ref().take(byte_count as u64);
| ^^^^^^^^^^^^^^^ cannot move out of borrowed content

我不知道如何解决这个问题。

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