There is no reason to support any other endianness that the native one, in performance sensitive/critical code.
To support it requires lots of bit fiddling. If performance it not one of your worries, you can simply do:
public static FloatBuffer ensureDirectNativeEndian(FloatBuffer fb) {
if(fb.isDirect() && fb.order() == ByteOrder.nativeOrder()) {
return fb;
}
FloatBuffer copy = BufferUtils.createFloatBuffer(fb.remaining());
copy.put(fb); // lots of bit fiddling
copy.flip();
return copy;
}