Bạn cần sử dụng các lệnh getFloat() và putFloat() trong FloatBuffer của ByteBuffer. Trong thực tế, bạn chắc chắn nên làm điều này đơn giản chỉ vì tốc độ tuyệt đối. Và đó là một điều tuyệt vời để hiểu về thao tác byte. Bạn cũng có thể trộn và kết hợp dữ liệu và đặt và nhận dữ liệu khi cần. Tất cả đều được hỗ trợ bởi bộ đệm byte. Vì vậy, xảy ra phổ biến của việc gửi một mảng, bạn cần phải gửi kích thước của mảng quá.
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());
}
Bạn chỉ cần đảm bảo phân bổ đủ byte để lưu trữ mọi thứ trong bộ đệm. Viết một số nội dung, viết một số nội dung khác, v.v. Hiểu điểm này giúp mọi thứ trở nên dễ dàng hơn. Ngày Flipside chúng tôi về cơ bản là giống nhau, mặc dù chúng tôi cần thêm một đọc bởi vì chúng tôi không biết làm thế nào lớn mảng là, chỉ có thể có một:
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;
}
Và đối với chức năng đầy đủ, mặc dù không chính xác phần điều này:
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;
}
trả lời độc đáo ở đây: http://stackoverflow.com/a/19624671/534347 –