Read::read
zwraca liczbę faktycznie przeczytanych bajtów, która może być mniejsza niż żądany bufor. W wielu przypadkach dopuszczalne jest wykonywanie wielu połączeń do read
w celu całkowitego wypełnienia bufora.Co to jest idiomatyczny sposób wypełniania bufora dostarczanego przez użytkownika podczas odczytywania bajtów?
Mam ten kod, ale wydaje się dość niezgrabny:
use std::io::{self, Read};
fn read_complete<R>(mut rdr: R, buf: &mut [u8]) -> io::Result<()>
where R: Read
{
let mut total_read = 0;
loop {
let window = &mut buf[total_read..];
let bytes_read = try!(rdr.read(window));
// Completely filled the buffer
if window.len() == bytes_read {
return Ok(());
}
// Unable to read anything
if bytes_read == 0 {
return Err(io::Error::new(io::ErrorKind::Other, "Unable to read complete buffer"));
}
// Partial read, continue
total_read += bytes_read;
}
}
fn main() {}
Czy istnieje funkcja w bibliotece standardowej, które będą abstrakcyjne ta praca z dala dla mnie?