Как записать в файл 2D-массив чисел с плавающей запятой в байтах? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующий массив с плавающей запятой:

float[] arr = [ (1.2,2.3,2.4), (4.7,4.8,9.8) ]

и я хочу sh записать его в файл через DataOutputStream в байтах. Я пробовал это до сих пор:

      DataOutputStream out = new DataOutputStream(new FileOutputStream(filename));

      for(int row = 0; row<arr.length; row ++) {
                for(int column = 0; column<arr[0].length; column++) {
                    out.writeByte(arr[row][column]);
                }
            }

Но я получаю эту ошибку:

The method writeByte(int) in the type DataOutputStream is not applicable for the arguments (float)

Обычно то же самое будет работать, если arr и целочисленный массив были. Кто-нибудь знает, как я могу записать каждый элемент массива в виде байта в файл? Заранее спасибо

1 Ответ

1 голос
/ 19 июня 2020

Этот фрагмент кода работает:

// fix array declaration
float[][] arr = { {1.2f,2.3f,2.4f}, {4.7f,4.8f,9.8f} };

// use try-with-resources to close output stream automatically
try (DataOutputStream out = new DataOutputStream(new FileOutputStream("floats.dat"))) {
    for (int row = 0; row < arr.length; row++) {
        for (int column = 0; column < arr[row].length; column++) {
            out.writeFloat(arr[row][column]);
        }
    }
}
// resulting file has length 24 bytes

try (DataOutputStream out = new DataOutputStream(new FileOutputStream("float_bytes.dat"))) {
    for (int row = 0; row < arr.length; row++) {
        for (int column = 0; column < arr[row].length; column++) {
            out.writeByte((byte)arr[row][column]);
        }
    }
}
// resulting file has length 6 bytes
...