197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes/* 297aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * Copyright (C) 2011 Google Inc. 397aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * 497aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 597aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * you may not use this file except in compliance with the License. 697aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * You may obtain a copy of the License at 797aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * 897aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 997aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * 1097aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * Unless required by applicable law or agreed to in writing, software 1197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 1297aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1397aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * See the License for the specific language governing permissions and 1497aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes * limitations under the License. 1597aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes */ 1697aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes 1797aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughespackage benchmarks; 1897aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes 19ea13f8291a92b6f47f50011da1d5e8c107984bc3Paul Duffinimport com.google.caliper.BeforeExperiment; 2097aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport com.google.caliper.Param; 2197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport java.io.BufferedInputStream; 2297aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport java.io.File; 2397aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport java.io.FileOutputStream; 2497aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport java.io.InputStream; 2597aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport java.util.Random; 2697aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport java.util.zip.ZipEntry; 2797aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport java.util.zip.ZipFile; 2897aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughesimport java.util.zip.ZipOutputStream; 2997aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes 30ea13f8291a92b6f47f50011da1d5e8c107984bc3Paul Duffinpublic final class BufferedZipFileBenchmark { 3197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes @Param({"128", "1024", "8192", "65536"}) int compressedSize; 3297aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes @Param({"4", "32", "128"}) int readSize; 3397aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes 3497aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes private File file; 3597aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes 36ea13f8291a92b6f47f50011da1d5e8c107984bc3Paul Duffin @BeforeExperiment 37ea13f8291a92b6f47f50011da1d5e8c107984bc3Paul Duffin protected void setUp() throws Exception { 38fa07c88938c939eea9770e52f4813476e4ba6f3bNarayan Kamath System.setProperty("java.io.tmpdir", "/data/local/tmp"); 3997aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes file = File.createTempFile(getClass().getName(), ".zip"); 4097aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes file.deleteOnExit(); 4197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes 4297aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes Random random = new Random(0); 4397aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file)); 4497aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes byte[] data = new byte[8192]; 4597aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes out.putNextEntry(new ZipEntry("entry.data")); 4697aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes int written = 0; 4797aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes while (written < compressedSize) { 4897aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes random.nextBytes(data); 4997aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes int toWrite = Math.min(compressedSize - written, data.length); 5097aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes out.write(data, 0, toWrite); 5197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes written += toWrite; 5297aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes } 5397aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes out.close(); 5497aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes } 5597aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes 5697aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes public void timeUnbufferedRead(int reps) throws Exception { 5797aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes for (int i = 0; i < reps; i++) { 5897aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes ZipFile zipFile = new ZipFile(file); 5997aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes ZipEntry entry = zipFile.getEntry("entry.data"); 6097aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes InputStream in = zipFile.getInputStream(entry); 6197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes byte[] buffer = new byte[readSize]; 6297aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes while (in.read(buffer) != -1) { 6397aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes } 6497aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes in.close(); 6597aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes zipFile.close(); 6697aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes } 6797aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes } 6897aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes 6997aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes public void timeBufferedRead(int reps) throws Exception { 7097aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes for (int i = 0; i < reps; i++) { 7197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes ZipFile zipFile = new ZipFile(file); 7297aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes ZipEntry entry = zipFile.getEntry("entry.data"); 7397aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes InputStream in = new BufferedInputStream(zipFile.getInputStream(entry)); 7497aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes byte[] buffer = new byte[readSize]; 7597aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes while (in.read(buffer) != -1) { 7697aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes } 7797aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes in.close(); 7897aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes zipFile.close(); 7997aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes } 8097aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes } 8197aba27f961a5a6f37dcaf7f455df371e250ede3Elliott Hughes} 82