// 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 { ByteArrayOutputStream baos = new ByteArrayOutputStream(); LzmaOutputStream lo = new LzmaOutputStream( baos ); int byteCount = 0; for(int i = 0; i < ITERATIONS; i++) { 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(); long sum = ck.getValue(); System.out.printf ("%d bytes written, %d bytes compressed, checksum %X\n", byteCount, buf.length, sum); // and back again ByteArrayInputStream bais = new ByteArrayInputStream( buf ); 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()); assert sum == ck.getValue(); } public static void main( String[] args ) throws IOException { long start = System.nanoTime(); doit(); long elapsed = System.nanoTime() - start; elapsed /= 1000; System.out.printf("%d us elapsed\n", elapsed); } }