Вам необходимо использовать команды getFloat () и putFloat () в FloatBuffer ByteBuffer.На самом деле, вы должны сделать это просто из-за высокой скорости.И это замечательно для манипуляций с байтами.Вы также можете смешивать и сопоставлять данные, а также помещать и получать их по мере необходимости.Все это поддерживается байтовым буфером.Таким образом, обычно происходит отправка массива, вам также необходимо отправить размер массива.
public static void writeFloatArray(float[] array, OutputStream stream) throws IOException {
ByteBuffer buffer = ByteBuffer.allocate(4 * (array.length + 1)).putInt(array.length);
buffer.asFloatBuffer().put(array,0,array.length);
stream.write(buffer.array());
}
Вы просто должны выделить достаточно байтов для хранения всего в буфере.Напишите кое-что, напишите что-нибудь другое и т. Д. Понимание этого пункта облегчает жизнь.С другой стороны, мы делаем в основном то же самое, хотя нам требуется дополнительное чтение, потому что мы не знаем, насколько велик массив, просто есть один:
public static float[] readFloatArray(InputStream in) throws IOException {
byte[] data = new byte[4];
if (readFully(in, data) != data.length) return null;
int length = ByteBuffer.wrap(data).getInt();
data = new byte[length * 4];
if (readFully(in,data) != data.length) return null;
float[] array = new float[length];
ByteBuffer.wrap(data).asFloatBuffer().get(array,0,array.length);
return array;
}
И для полной функциональности, хотя и неименно часть этого:
public static int readFully(InputStream in, byte[] data) throws IOException {
int offset = 0;
int bytesRead;
boolean read = false;
while ((bytesRead = in.read(data, offset, data.length - offset)) != -1) {
read = true;
offset += bytesRead;
if (offset >= data.length) {
break;
}
}
return (read) ? offset : -1;
}