Mega Code Archive

 
Categories / Java / File Input Output
 

ByteBuffer FloatBuffer demo

//package com.ryanm.util; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.util.Random; /**  * @author ryanm  */ public class BufferTest {   private ByteBuffer bb;   private FloatBuffer floats;   private float[] data;   /**    * @param args    */   public static void main(String[] args) {     new BufferTest().run();   }   private void run() {     final int size = 100000;     bb = ByteBuffer.allocateDirect(4 * size).order(ByteOrder.nativeOrder());     floats = bb.asFloatBuffer();     data = data(size);     System.out.println("# size\tsingle\tindexed\tbatch");     int base = 0;     int e = size;     while (base + e > 100) {       test(base + e);       e /= 2;     }   }   private void test(int elements) {     int time = 1000;     System.out.print(elements + "\t");     long kbps = singlePut(data, elements, floats, time);     System.out.print(kbps + "\t");     kbps = singleIndexedPut(data, elements, floats, time);     System.out.print(kbps + "\t");     kbps = bulkPut(data, elements, floats, time);     System.out.println(kbps + "\t");   }   private long singlePut(float[] data, int elements, FloatBuffer target,       int testTime) {     long start = System.currentTimeMillis();     long elapsed = 0;     int reps = 0;     target.clear();     do {       for (int i = 0; i < elements; i++) {         target.put(data[i]);       }       target.flip();       reps++;       elapsed = System.currentTimeMillis() - start;     } while (elapsed < testTime);     long bytes = (long) elements * (long) reps * 4;     return bytes / elapsed / 1024;   }   private long singleIndexedPut(float[] data, int elements,       FloatBuffer target, int testTime) {     long start = System.currentTimeMillis();     long elapsed = 0;     int reps = 0;     target.clear();     do {       for (int i = 0; i < elements; i++) {         target.put(i, data[i]);       }       reps++;       elapsed = System.currentTimeMillis() - start;     } while (elapsed < testTime);     long bytes = (long) elements * (long) reps * 4;     return bytes / elapsed / 1024;   }   private long bulkPut(float[] data, int elements, FloatBuffer target,       int testTime) {     long start = System.currentTimeMillis();     long elapsed = 0;     int reps = 0;     target.clear();     do {       target.put(data, 0, elements);       target.flip();       reps++;       elapsed = System.currentTimeMillis() - start;     } while (elapsed < testTime);     long bytes = (long) elements * (long) reps * 4;     return bytes / elapsed / 1024;   }   private float[] data(int elements) {     float[] data = new float[elements];     Random rng = new Random();     for (int i = 0; i < data.length; i++) {       data[i] = 100 * rng.nextFloat();     }     return data;   } }