// BenchMark.java -- // Copyright (c)2008 Christopher League <league@contrapunctus.net> // This is free software, but it comes with ABSOLUTELY NO WARRANTY. // GNU Lesser General Public License 2.1 or Common Public License 1.0 package net.contrapunctus.lzma; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Random; import java.util.zip.Adler32; import java.util.zip.Checksum; public class Benchmark { private static byte[][] data = null; private static final Random rnd = new Random(0xCAFEBABE); private static final Checksum ck = new Adler32(); private static final int EXPONENT = 18; private static final int ITERATIONS = 512; private static final int BUFSIZE = 8192; static { data = new byte[EXPONENT][]; int num = 1; for (int i = 0; i < data.length; i++, num *= 2) { data[i] = new byte[num]; rnd.nextBytes(data[i]); } } public static void doit() throws IOException { final ByteArrayOutputStream baos = new ByteArrayOutputStream(); final LzmaOutputStream lo = new LzmaOutputStream(baos); int byteCount = 0; for (int i = 0; i < ITERATIONS; i++) { final int k = rnd.nextInt(data.length); lo.write(data[k]); ck.update(data[k], 0, data[k].length); byteCount += data[k].length; } lo.close(); byte[] buf = baos.toByteArray(); final long sum = ck.getValue(); System.out.printf( "%d bytes written, %d bytes compressed, checksum %X\n", byteCount, buf.length, sum); // and back again final ByteArrayInputStream bais = new ByteArrayInputStream(buf); final LzmaInputStream li = new LzmaInputStream(bais); buf = new byte[BUFSIZE]; ck.reset(); int k = li.read(buf); byteCount = 0; while (k > 0) { byteCount += k; ck.update(buf, 0, k); k = li.read(buf); } System.out.printf("%d bytes decompressed, checksum %X\n", byteCount, ck.getValue()); li.close(); assert sum == ck.getValue(); } public static void main(String[] args) throws IOException { final long start = System.nanoTime(); doit(); long elapsed = System.nanoTime() - start; elapsed /= 1000; System.out.printf("%d us elapsed\n", elapsed); } }