ByteBuffer FloatBuffer demo : Buffering « File Input Output « Java






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;
  }
}

   
    
    
    
    
  








Related examples in the same category

1.Endian differences and data storageEndian differences and data storage
2.View BuffersView Buffers
3.Using BuffersUsing Buffers
4.Output BufferingOutput Buffering
5.Getting different representations from a ByteBufferGetting different representations from a ByteBuffer
6.Manipulating ints in a ByteBuffer with an IntBufferManipulating ints in a ByteBuffer with an IntBuffer
7.Circular Byte Buffer
8.Circular Char Buffer from http://ostermiller.org
9.Buffered copying
10.Byte Buffer
11.Circular Char Buffer
12.Char Buffer
13.Caching InputStream
14.Caching OutputStream