buffered read vs non buffered #541
Answered
by
Its-Just-Nans
Its-Just-Nans
asked this question in
Q&A
-
|
Hello Is this normal that when we use. A buffer, we don't have the same result as without using it ? When using Is this normal? use flate2::bufread::ZlibDecoder;
use flate2::write::ZlibEncoder;
use flate2::{Compression, Decompress};
use std::io::prelude::{Read, Write};
fn main() {
let mut e = ZlibEncoder::new(Vec::new(), Compression::new(6));
// CONTENT should be superior of the buffer size
let mut data = vec![0; 1024 * 8];
getrandom::fill(&mut data).unwrap();
let writen = e.write(&data).unwrap();
println!("writen {writen}");
let compressed_bytes = e.finish().unwrap();
println!("compressed size = {}", compressed_bytes.len());
println!("Test with header");
let mut d = ZlibDecoder::new(&*compressed_bytes);
let mut disk_buffer = [0; 1024];
loop {
let res = d.read(&mut disk_buffer[..]).unwrap();
println!("count read = {res}");
if res == 0 {
break;
}
}
println!("Test with header and buffered");
let mut d = ZlibDecoder::new(std::io::BufReader::new(&*compressed_bytes));
let mut disk_buffer = [0; 1024];
loop {
let res = d.read(&mut disk_buffer[..]).unwrap();
println!("count read = {res}");
if res == 0 {
break;
}
}
let end = compressed_bytes.len() - 4;
let raw_buf = &compressed_bytes[2..end];
println!("raw_buf = {}", raw_buf.len());
println!("Test with raw access");
let mut d = ZlibDecoder::new_with_decompress(raw_buf, Decompress::new(false));
let mut disk_buffer = [0; 1024];
loop {
let res = d.read(&mut disk_buffer[..]).unwrap();
println!("count read = {res}");
if res == 0 {
break;
}
}
println!("Test with buffered access");
let mut d =
ZlibDecoder::new_with_decompress(std::io::BufReader::new(raw_buf), Decompress::new(false));
let mut disk_buffer = [0; 1024];
loop {
let res = d.read(&mut disk_buffer[..]).unwrap();
println!("count read = {res}");
if res == 0 {
break;
}
}
}Thanks |
Beta Was this translation helpful? Give feedback.
Answered by
Its-Just-Nans
Mar 3, 2026
Replies: 1 comment
-
|
It seems that it's the normal behavior of https://doc.rust-lang.org/stable/std/io/trait.Read.html#tymethod.read |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
Byron
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It seems that it's the normal behavior of
read()and if we want to read the full buffer we needread_exact()https://doc.rust-lang.org/stable/std/io/trait.Read.html#tymethod.read