package benchmark;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import com.sun.cldchi.jvm.JVM;
public class ByteArrayInputOutputStreamBench {
byte[] generateArray() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int n = 0; n < 16; n++) {
for (int i = 0; i < 256; i++) {
baos.write(i);
}
}
baos.close();
return baos.toByteArray();
}
void writeSingle(byte[] array) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int i = 0; i < 4096; i++) {
baos.write(array[i]);
}
baos.close();
}
void readSingle(byte[] array) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(array);
for (int i = 0; i < 4096; i++) {
int val = bais.read();
}
}
void writeArray64(byte[] array) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int i = 0; i < 64; i++) {
baos.write(array, i << 6, 64);
baos.close();
}
}
void readArray64(byte[] array) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(array);
byte[] output = new byte[4096];
for (int i = 0; i < 64; i++) {
bais.read(output, i << 6, 64);
}
}
void writeArray128(byte[] array) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int i = 0; i < 32; i++) {
baos.write(array, i << 7, 128);
}
baos.close();
}
void readArray128(byte[] array) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(array);
byte[] output = new byte[4096];
for (int i = 0; i < 32; i++) {
bais.read(output, i << 7, 128);
}
}
void writeArray256(byte[] array) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int i = 0; i < 16; i++) {
baos.write(array, i << 8, 256);
}
baos.close();
}
void readArray256(byte[] array) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(array);
byte[] output = new byte[4096];
for (int i = 0; i < 16; i++) {
bais.read(output, i << 8, 256);
}
}
void writeArray(byte[] array) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(array, 0, 4096);
baos.close();
}
void readArray(byte[] array) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(array);
byte[] output = new byte[4096];
bais.read(output, 0, 4096);
}
void runBenchmark() {
try {
long start, time;
byte[] array = generateArray();
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 250; i++) {
writeSingle(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("writeSingle: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 250; i++) {
readSingle(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("readSingle: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 5000; i++) {
writeArray64(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("writeArray64: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 5000; i++) {
readArray64(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("readArray64: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 5000; i++) {
writeArray128(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("writeArray128: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 5000; i++) {
readArray128(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("readArray128: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 5000; i++) {
writeArray256(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("writeArray256: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 5000; i++) {
readArray256(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("readArray256: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 25000; i++) {
writeArray(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("writeArray: " + time);
start = JVM.monotonicTimeMillis();
for (int i = 0; i < 25000; i++) {
readArray(array);
}
time = JVM.monotonicTimeMillis() - start;
System.out.println("readArray: " + time);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
ByteArrayInputOutputStreamBench bench = new ByteArrayInputOutputStreamBench();
bench.runBenchmark();
}
}