| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > ClassNotFoundException |
| Автор: moes 30.6.2008, 20:53 | ||
| Всем привет Может быть сталкивался со следующейпроблемой. У меня есть класс, который наследует интерфеус Serializable:
Я его записывал в файл, при помощи ObjectOutputStream. И соответственно считывал, используя ObjectInputStream. Потом я этот класс перенес в другой package. Теперь при считывании из файла получаю исключение ClassNotFoundException. Есть ли возможность считать файл? заранее спасибо |
| Автор: polosatij 30.6.2008, 21:06 |
я так думаю, востанови его на прежнем месте, считай и перезапиши то, что у тебя было.. вот.. |
| Автор: w1nd 30.6.2008, 21:07 |
А изменения ограничиваются только переносом в другой пакет? Состав полей и сигнатуры не менялись? |
| Автор: moes 30.6.2008, 21:11 | ||||
Это канечно можно, сделать. Но хотелось бы узнать другие возможности. Добавлено через 1 минуту и 3 секунды
Изменился толь пакет, больше ничего не менял |
| Автор: w1nd 1.7.2008, 00:45 |
Тогда я присоединяюсь к уже прозвучавшему совету. Вам вообще что нужно - восстановить данные или убрать зависимость от подобных изменений? |
| Автор: moes 1.7.2008, 10:04 |
| По большому счету хочется убрать зависимость от таких случаев. Допустим, если файлов очень много и не представляется возможным их перекопирование. Неужели, если поменять имя класса или в другой пакет его перекопировать нету возможности считать файл. Я просто думал, что есть какоу-то стандартное средство, которое может на лету подменять имя класса. |
| Автор: LSD 1.7.2008, 10:43 |
Реализуй собственный механизм сериализации. |
| Автор: moes 1.7.2008, 10:58 | ||
Это очень трудоемко для данной задачи Просто удивительно, что в случае рефакторинга (просто поменять имя класса или пакет) и уже нету возможности читать файл. |
| Автор: moes 1.7.2008, 11:37 |
| Можно было сделать, что-то вроде маппинга. Чтобы дать возможность делать соответствии между классами. MyClass -> NewNameMySlass Тогда JVM будет знать, что если обращаются к классе MyClass, надо использовать NewNameMyClass. |
| Автор: LSD 1.7.2008, 12:04 |
Можно. Но реализовывать придется тебе, т.к. создатели JRE посчитали что это нафиг не нужно (и тут я с ними согласен) и создает кучу проблем. |
| Автор: moes 1.7.2008, 12:12 |
| а можно ссылочку или пример как это можно реализовать. И вообще сложно ли это? |
| Автор: LSD 1.7.2008, 12:17 |
Нет никаких ссылок, смотри как работает сериализация (все исходники доступны) и делай свою с учетом своих требований. Да. |
| Автор: moes 1.7.2008, 12:28 |
| Думаю легче всего будет вернуть старые имена классов, и пакетов |