сохранение / загрузка массива объектов с использованием Java-сериализации - PullRequest
1 голос
/ 22 октября 2011

У меня есть следующий класс, который выполняет некоторые вычисления для заполнения своих статических массивов.

public class Amount implements Serializable{
      private static final long serialVersionUID = 8141477444408242243L;
      public static Amount values1[][] = new Amount[10][30];
      public static Amount values2[][] = new Amount[10][30];
      public static Amount values3[][] = new Amount[10][30];

      double highestValue;
      double highestAmount;
      double lowestAmount;
      double lowestValue;

      ...
}

Поскольку вычисления занимают около 20 минут, я хочу сохранить массивы в файле и загрузить значениякогда программа запускается.Я пытаюсь использовать метод сериализации Java и имею следующие функции

public static void loadFile(Amount[][] arr, String filename){
    try {
        FileInputStream fis = new FileInputStream(filename);
        ObjectInputStream in = new ObjectInputStream(fis);
        arr = (Amount[][])in.readObject();
        in.close();
      }
      catch (Exception e) {
          System.out.println(e);
      }
}

public static void saveFile(Amount[][] arr, String filename){
     try {
         FileOutputStream fos = new FileOutputStream(filename);
         ObjectOutputStream out = new ObjectOutputStream(fos);
         out.writeObject(arr);
         out.flush();
         out.close();
      }
      catch (IOException e) {
          System.out.println(e); 
      }
}

, которые я называю вот так saveFile(values1, "valueOneSaveFile"); и loadFile(values1, "valueOneSaveFile");

Я запустил программу один раз, сохранив всемассивы для различных файлов.Файлы были созданы и выглядят примерно правильного размера.Когда я изменяю свою программу для вызова функций loadFile, массивы не отображаются для правильной инициализации.Я получаю исключения нулевого указателя при попытке прочитать значение из массива (который после загрузки выглядит пустым)

Ответы [ 2 ]

3 голосов
/ 22 октября 2011

Проблема в вашем методе LoadFile. Java передает параметры по значению. В случае объектов передается копия «указателя». При обновлении массива:

arr = (Amount[][])in.readObject();

Вы не обновляете массив Amount.values1, вместо этого локальная переменная arr указывает на новый массив.

Вы должны изменить сигнатуру метода на:

public static Amount[][] loadFile(String filename)

И используйте его соответственно.

0 голосов
/ 22 октября 2011

Возможно, это проблема с методами readObject и writeObject, которые вы реализуете в своем классе Amount.Подробный пример можно найти здесь .

Вы также можете рассмотреть возможность использования XStream для сохранения / загрузки ваших данных.Он очень прост в использовании, как показано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...