Чтение объектов из файла .dat с использованием Java - PullRequest
0 голосов
/ 11 июля 2020

У меня есть 3 объекта типа Fraction в файле .dat, и я пытаюсь прочитать содержимое файла .dat, используя Java.

В следующем блоке кода ниже я сохраняю получение:

Exception in thread "main" java.lang.ClassCastException: class Fraction cannot be cast to class [LFraction; (Fraction and [LFraction; are in unnamed module of loader 'app')
    at Mod8Problem1.main(Mod8Problem1.java:26)

Я пробовал несколько вещей, но продолжаю получать то же исключение. Как лучше всего это исправить?

try(
        ObjectInputStream input = new ObjectInputStream(new FileInputStream("SerialF.dat"))
) {
    Fraction[] updatedFractions = (Fraction[]) (input.readObject());

    for (int i = 0; i < updatedFractions.length; i++) {
        System.out.println(updatedFractions[i]);
    }
}      

1 Ответ

0 голосов
/ 11 июля 2020

Ваша проблема здесь:

Fraction[] updatedFractions = (Fraction[]) (input.readObject());

input.readObject() возвращает Fraction, но вы пытаетесь преобразовать его в Fraction[], который не является совместимым типом. Тем не менее, вы можете прочитать несколько Fraction в массиве, чтобы достичь того же результата. Для этого можно использовать ArrayList, например:

ArrayList<Fraction> fractions = new ArrayList<>();

try (
    ObjectInputStream input = new ObjectInputStream(new FileInputStream("SerialF.dat"))
) {
    while (input.available() > 0) {
        fractions.add((Fraction) input.readObject);
        
    }
}

Fraction[] updatedFractions = fractions.toArray(new Fraction[0]);

for (Fraction fraction : updatedFractions) {
    System.out.println(fraction);
}
...