Read::read
restituisce il numero di byte effettivamente letti, che può essere inferiore al buffer richiesto. In molti casi, è possibile effettuare più chiamate allo read
per riempire completamente il buffer.Qual è un modo idiomatico per riempire un buffer fornito dall'utente durante la lettura dei byte?
Ho questo codice, ma sembra piuttosto sgraziato:
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() {}
C'è una funzione della libreria standard che sarà estratto questo lavoro per me via?