package esl.cuenet.index.benchmarks;
import esl.system.SysLoggerUtils;
import org.apache.log4j.Logger;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.DoubleBuffer;
import java.nio.LongBuffer;
import java.nio.channels.FileChannel;
import java.util.Random;
public class NIOBenchmarks {
static {
SysLoggerUtils.initLogger();
}
Logger logger = Logger.getLogger(NIOBenchmarks.class);
@Test
public void writeBytes() throws Exception {
File temp1 = File.createTempFile("byteArrayWriteTest1", null);
File temp2 = File.createTempFile("byteArrayWriteTest2", null);
File temp3 = File.createTempFile("byteArrayWriteTest3", null);
logger.info(temp1.getAbsolutePath());
temp1.deleteOnExit();
temp2.deleteOnExit();
temp3.deleteOnExit();
FileOutputStream stream = new FileOutputStream(temp1);
int N = 4096;
Random generator = new Random();
byte[] bytes = new byte[N];
generator.nextBytes(bytes);
long _start_time = System.currentTimeMillis();
for (int i=0; i<1000; i++) {
//byte[] bytes = new byte[N];
//generator.nextBytes(bytes);
stream.write(bytes);
stream.flush();
}
stream.close();
logger.info("Time to save Byte Array (1000): " + (System.currentTimeMillis() - _start_time));
stream = new FileOutputStream(temp2);
_start_time = System.currentTimeMillis();
for (int i=0; i<10000; i++) {
//byte[] bytes = new byte[N];
//generator.nextBytes(bytes);
stream.write(bytes);
stream.flush();
}
stream.close();
logger.info("Time to save Byte Array (10000): " + (System.currentTimeMillis() - _start_time));
stream = new FileOutputStream(temp3);
_start_time = System.currentTimeMillis();
for (int i=0; i<100000; i++) {
//byte[] bytes = new byte[N];
//generator.nextBytes(bytes);
stream.write(bytes);
stream.flush();
}
stream.close();
logger.info("Time to save Byte Array (100000): " + (System.currentTimeMillis() - _start_time));
}
@Test
public void writeByteBuffers() throws Exception {
File temp1 = File.createTempFile("ByteBuffersWriteTest1", null);
File temp2 = File.createTempFile("ByteBuffersWriteTest2", null);
File temp3 = File.createTempFile("ByteBuffersWriteTest3", null);
logger.info(temp1.getAbsolutePath());
int N = 4096;
Random generator = new Random();
byte[] bytes = new byte[N];
generator.nextBytes(bytes);
FileOutputStream stream = new FileOutputStream(temp1);
FileChannel channel = stream.getChannel();
long _start_time = System.currentTimeMillis();
for (int i=0; i<1000; i++) {
ByteBuffer buffer = ByteBuffer.allocate(N);
buffer.put(bytes);
//for (int j=0; j<N; j++) buffer.put(j, (byte)generator.nextInt());
channel.write(buffer);
}
stream.close();
logger.info("Time to save ByteBuffer (1000): " + (System.currentTimeMillis() - _start_time));
stream = new FileOutputStream(temp2);
channel = stream.getChannel();
_start_time = System.currentTimeMillis();
for (int i=0; i<10000; i++) {
ByteBuffer buffer = ByteBuffer.allocate(N);
buffer.put(bytes);
//for (int j=0; j<N; j++) buffer.put(j, (byte)generator.nextInt());
channel.write(buffer);
}
stream.close();
logger.info("Time to save ByteBuffer (10000): " + (System.currentTimeMillis() - _start_time));
stream = new FileOutputStream(temp3);
channel = stream.getChannel();
_start_time = System.currentTimeMillis();
for (int i=0; i<100000; i++) {
ByteBuffer buffer = ByteBuffer.allocate(N);
buffer.put(bytes);
//for (int j=0; j<N; j++) buffer.put(j, (byte)generator.nextInt());
channel.write(buffer);
}
stream.close();
logger.info("Time to save ByteBuffer (100000): " + (System.currentTimeMillis() - _start_time));
temp1.deleteOnExit();
temp2.deleteOnExit();
temp3.deleteOnExit();
}
@Test
public void writeLongBuffers() throws Exception {
int N = 4096;
Random generator = new Random();
LongBuffer buffer = LongBuffer.allocate(N);
for (int i=0; i<N; i++) {
buffer.put(i, generator.nextLong());
}
long _start_time = System.currentTimeMillis();
int r=0;
int w=0;
long p;
for (int j=0; j<10*1000*1000; j++) {
if (generator.nextBoolean()) {
p = buffer.get(generator.nextInt(N));
r++;
}
else {
buffer.put(generator.nextInt(N), generator.nextLong());
w++;
}
}
logger.info("LongBuffer " + (System.currentTimeMillis() - _start_time) + "ms for " + r + " reads, " + w + " writes.");
long[] numbers = new long[N];
for (int i=0; i<N; i++) numbers[i] = generator.nextLong();
for (int j=0; j<10*1000*1000; j++) {
if (generator.nextBoolean()) {
p = numbers[generator.nextInt(N)];
r++;
}
else {
numbers[generator.nextInt(N)] = generator.nextLong();
w++;
}
}
logger.info("Long Array " + (System.currentTimeMillis() - _start_time) + "ms for " + r + " reads, " + w + " writes.");
}
@Test
public void writeDoubleBuffers() throws Exception {
int N = 4096;
Random generator = new Random();
DoubleBuffer buffer = DoubleBuffer.allocate(N);
for (int i=0; i<N; i++) {
buffer.put(i, generator.nextInt(360) * generator.nextDouble() - 180);
}
long _start_time = System.currentTimeMillis();
int r=0;
int w=0;
double p;
for (int j=0; j<10*1000*1000; j++) {
if (generator.nextBoolean()) {
p = buffer.get(generator.nextInt(N));
r++;
}
else {
buffer.put(generator.nextInt(N), generator.nextInt(360) * generator.nextDouble() - 180);
w++;
}
}
logger.info("DoubleBuffer " + (System.currentTimeMillis() - _start_time) + "ms for " + r + " reads, " + w + " writes.");
double[] numbers = new double[N];
for (int i=0; i<N; i++) numbers[i] = generator.nextInt(360) * generator.nextDouble() - 180;
for (int j=0; j<10*1000*1000; j++) {
if (generator.nextBoolean()) {
p = numbers[generator.nextInt(N)];
r++;
}
else {
numbers[generator.nextInt(N)] = generator.nextInt(360) * generator.nextDouble() - 180;
w++;
}
}
logger.info("Double Array " + (System.currentTimeMillis() - _start_time) + "ms for " + r + " reads, " + w + " writes.");
}
}