use bencher::{benchmark_group, benchmark_main}; use std::io::{Cursor, Read, Write}; use bencher::Bencher; use getrandom::getrandom; use zip::{ZipArchive, ZipWriter}; fn generate_random_archive(size: usize) -> Vec { let data = Vec::new(); let mut writer = ZipWriter::new(Cursor::new(data)); let options = zip::write::FileOptions::default().compression_method(zip::CompressionMethod::Stored); writer.start_file("random.dat", options).unwrap(); let mut bytes = vec![0u8; size]; getrandom(&mut bytes).unwrap(); writer.write_all(&bytes).unwrap(); writer.finish().unwrap().into_inner() } fn read_entry(bench: &mut Bencher) { let size = 1024 * 1024; let bytes = generate_random_archive(size); let mut archive = ZipArchive::new(Cursor::new(bytes.as_slice())).unwrap(); bench.iter(|| { let mut file = archive.by_name("random.dat").unwrap(); let mut buf = [0u8; 1024]; loop { let n = file.read(&mut buf).unwrap(); if n == 0 { break; } } }); bench.bytes = size as u64; } benchmark_group!(benches, read_entry); benchmark_main!(benches);