Как десериализовать из файла в другой класс - PullRequest
6 голосов
/ 09 августа 2011

Я сериализую ArrayList<packageA.Changelog> list в файл и передал файл в другую систему на другом компьютере.

И, поскольку файл получен из другой системы, у меня нет того же packageA.Changelogвместо этого класс packageB.Changelog имеет точно такую ​​же структуру, но в другом пакете.

И когда я использую

ArrayList<packageB.Changelog> changelogs = (ArrayList<packageB.Changelog>)ois.readObject();

для чтения из файла Iполучил ClassCastException.

Как избежать этого исключения?Нужно ли создавать такую ​​же структуру пакета в другой системе только для получения списка?

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

Да, есть одна из трех вещей, которые вы можете сделать.

  1. Создать тот же класс с тем же именем пакета

  2. Создайте интерфейс (конечно же, в одном пакете на обеих машинах) и отправьте его на клиентские машины. Все ваши классы могут реализовать этот интерфейс даже в разных пакетах. Например, ваш интерфейс может быть назван Loggable, и он должен иметь все объявленные методы, которые сейчас находятся в классе ChangeLog.

  3. Или, наконец, вместо использования класса "ChangeLog", просто полностью избегайте его использования и используйте вместо него HashMap, который по умолчанию сериализуем. И вам не придется ничего отправлять на ваш клиентский (другой) компьютер. Вы сможете сериализовать ArrayList и преобразовать его обратно в объект на другом компьютере.

Все классы, которые реализуют класс Loggable, могут затем приводиться к этому типу. Я надеюсь, что это поможет

0 голосов
/ 10 августа 2011

У меня нет того же класса packageA.Changelog, вместо этого packageB.Changelog, который имеет точно такую ​​же структуру, но в другой упаковке.

Почему? В этом проблема. Не делай этого.

...