1 use bencher::{benchmark_group, benchmark_main}; 2 3 use std::io::{Cursor, Read, Write}; 4 5 use bencher::Bencher; 6 use getrandom::getrandom; 7 use zip::{ZipArchive, ZipWriter}; 8 generate_random_archive(size: usize) -> Vec<u8>9fn generate_random_archive(size: usize) -> Vec<u8> { 10 let data = Vec::new(); 11 let mut writer = ZipWriter::new(Cursor::new(data)); 12 let options = 13 zip::write::FileOptions::default().compression_method(zip::CompressionMethod::Stored); 14 15 writer.start_file("random.dat", options).unwrap(); 16 let mut bytes = vec![0u8; size]; 17 getrandom(&mut bytes).unwrap(); 18 writer.write_all(&bytes).unwrap(); 19 20 writer.finish().unwrap().into_inner() 21 } 22 read_entry(bench: &mut Bencher)23fn read_entry(bench: &mut Bencher) { 24 let size = 1024 * 1024; 25 let bytes = generate_random_archive(size); 26 let mut archive = ZipArchive::new(Cursor::new(bytes.as_slice())).unwrap(); 27 28 bench.iter(|| { 29 let mut file = archive.by_name("random.dat").unwrap(); 30 let mut buf = [0u8; 1024]; 31 loop { 32 let n = file.read(&mut buf).unwrap(); 33 if n == 0 { 34 break; 35 } 36 } 37 }); 38 39 bench.bytes = size as u64; 40 } 41 42 benchmark_group!(benches, read_entry); 43 benchmark_main!(benches); 44