Tutorial :How to save a Java FloatBuffer (or any Buffer) to a file


I have a FloatBuffer of known size and just want to dump the data to a file (in binary) for inspection outside my app. What's the easiest way to do this?



// There are dependencies on how you create your floatbuffer for this to work  // I suggest starting with a byte buffer and using asFloatBuffer() when  // you need it as floats.  // ByteBuffer b = ByteBuffer.allocate(somesize);  // FloatBuffer fb = b.asFloatBuffer();  // There will also be endiance issues when you write binary since  // java is big-endian. You can adjust this with Buffer.order(...)  // b.order(ByteOrder.LITTLE_ENDIAN)  // If you're using a hex-editor you'll probably want little endian output  // since most consumer machines (unless you've got a sparc / old mac) are little      FileOutputStream fos = new FileOutputStream("some_binary_output_file_name");  FileChannel channel = fos.getChannel();    channel.write(byteBufferBackingYourFloatBuffer);    fos.close();  

TEXT OUTPUT: Since you want this to be viewable I assume you want a text file. You'll want to use a PrintStream.

// Try-catch omitted for simplicity    PrintStream ps = new PrintStream("some_output_file.txt");  for(int i = 0; i < yourFloatBuffer.capacity(); i++)  {     // put each float on one line     // use printf to get fancy (decimal places, etc)     ps.println(yourFloagBuffer.get(i));  }    ps.close();  

Didn't have time to post a full raw/binary (non-text) version of this. If you want to do that use a FileOutputStream, get the FileChannel, and directly write the FloatBuffer (since it's a ByteBuffer)


Asusming you want the data as binary:

Start with a ByteBuffer. Call asFloatBuffer to get your FloatBuffer. When you've finished doing your stuff, save the ByteBuffer out to a WritableByteChannel.

If you already have FloatBuffer it can be copied into the buffer from step 2 with a put.

A low performance but easier way would be to use Float.floatToIntBit.

(Watch for endianess, obviously.)


This iterates through the array backed by your buffer and outputs each float. Just replace the text file and floatBuffer with your own parameters.

PrintStream out = new PrintStream("target.txt");  for(float f : floatBuffer.array()){    out.println(f);  }  out.close();  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »