2014-09-06 3 views
0

Я сохранил объект ArrayList<MyClass> как объект с ObjectOutputStream. Теперь, как я могу прочитать этот объект в другом проекте приложения с ObjectInputStream? Я попытался, и он выбрасывает ClassNotFoundException. Я скопировал MyClass из проекта 1 в проект 2. Нужно ли мне что-то делать?Чтение Java ObjectInputStream из разных приложений

+0

Почему вы читаете «FileInputStream» вместо «ObjectInputStream»? Вы проверяли, что оба класса имеют один и тот же 'serialVersionUID'? И если это не поможет, не могли бы вы пройти мимо всего исключения и последнего кода? – msrd0

+1

Что вы подразумеваете под «копированием». Вы не должны копировать его. Вы должны использовать тот же самый класс. –

+0

мой плохой я использую ObjectInputStream в другом проекте тоже .. я отредактирую вопрос –

ответ

1

Вы не должны копировать класс и ожидать, что он будет выглядеть одинаково - компилятор Java/JVM замечает изменения. Используйте точно такой же файл класса !!!

Есть несколько версий, чтобы сделать так:

  • Deliver Project1 с Project2 и настроить ваш CLASSPATH
  • Скопируйте файл класса в тот же пакет к Project2
  • прикрепить Jar к Project2 содержащий MyClass

И что вы никогда не должны забывать: Каждые Serializable должен иметь serialVersionUID Eclipse автоматически делает предупреждение - щелкните по нему и сгенерируйте его. Если у вас нет Eclipse, используйте serialver из JDK.
Но не забывайте: если ваш класс изменился так, что старые версии не будут интерпретироваться новыми версиями, измените значение serialversionUID.

+0

* Каждый Serializable должен иметь serialVersionUID *: no. Это просто неправда. Добавление serialVersionUID, если вы не знаете, что это такое, как его использовать, и как внести изменения в свой класс и сохранить его обратно совместимым с сериализованными версиями, просто добавляет шум в ваш код. –

+0

@JBNizet Это неправда. У меня был тот же JAR-файл с 'Object [Input | Output] Stream' в нем, работающим в Linux и Windows, а файлы, созданные на одной ОС, не выполнялись на другом, с исключением, что эти' serialVersionUID' didn ' t соответствует – msrd0

+0

Тогда у вас, вероятно, было 2 версии одного и того же класса, но скомпилированы двумя разными компиляторами. См. Http://docs.oracle.com/javase/7/docs/platform/serialization/spec/class.html#4100 –

Смежные вопросы