Сохраните FloatArray в файле Raw

Мне нужно сохранить массив чисел с плавающей запятой в Big Endian в файл Raw. Кто-нибудь знает, как это сделать? Я думал, что java.io.DataOuputStream.writeFloat(float v), но я точно не знаю, как включить этот метод в проблему. Благодарность!

1 ответ

Попробуй это.

static final ByteOrder BYTE_ORDER = ByteOrder.BIG_ENDIAN;

static void write(float[] floats, String file) throws IOException {
    ByteBuffer bb = ByteBuffer.allocate(floats.length * Float.BYTES).order(BYTE_ORDER);
    bb.asFloatBuffer().put(floats);
    Files.write(Path.of(file), bb.array());
}

static float[] read(String file) throws IOException {
    byte[] bytes = Files.readAllBytes(Path.of(file));
    FloatBuffer fb = ByteBuffer.wrap(bytes).order(BYTE_ORDER).asFloatBuffer();
    float[] floats = new float[fb.capacity()];
    fb.get(floats);
    return floats;
}

а также

float[] floats = {12.3F, 4.5F, 0.678F, 0.009F};
String file = "data/floats.bin";
write(floats, file);
float[] read = read(file);
System.out.println(Arrays.toString(read));

выход:

[12.3, 4.5, 0.678, 0.009]

Вы можете изменить порядок байтов в файле, изменив BYTE_ORDER постоянный.

Другие вопросы по тегам