2014-11-04 2 views
0

Как я могу загрузить класс, который не нашел при чтении объекта из ObjectInputStreamКак я могу загрузить класс, который не нашел при чтении объекта из ObjectInputStream

Пример

InputStream pis = new InputStream(); 
    ObjectInputStream ois = new ObjectInputStream(pis); 
    Object o = null; 
    try{ 
     o = ois.readObject(); 
    } 
    catch(ClassNotFoundException ex){ 
     //How to try to load a class to read object again????? 
     o = ois.readObject(); 
    } 

Спасибо, TH

+0

Где вы планируете загружать классы? –

+0

Я просто думаю. Я планирую загрузить класс из нового класса с помощью pass ClassNotFoundException. – scarework

ответ

1

Классы объектов, которые вы пытаетесь десериализовать, должны быть уже на пути к классу при попытке десериализации объектов.

Если вы столкнулись с этим, я думаю, вы не можете много сделать во время выполнения. Вместо этого вы можете использовать это, чтобы определить, по-прежнему ли вы пропускаете классы из вашего пути к классам, и добавьте их в свой проект и путь к классам во время разработки.

+0

Ну, технически вы можете создать пользовательский загрузчик классов для загрузки классов из класса pathpath. –

+0

@RobbyCornelissen Да, конечно, но для этого потребуется проанализировать имя класса, которое отсутствует, и вам нужно будет знать, где его загрузить. В общем, это не удобно. Где бы вы загрузили этот класс из: '" com.expekertia.tools.CacheLoader "?? – icza

+0

Вам действительно нужно знать, где его загрузить. Об этом удобно или нет, я думаю, это будет зависеть от ситуации. Иногда у вас мало выбора. –

0

Используйте на одном конце RMIClassLoader и обратите внимание на его документально подтвержденные требования на отправляющем конце.

0

ClassNotFoundException также может быть выброшен, если класс перемещен.

Предположим, вы сериализуете экземпляр класса. Позже класс перемещается из-за некоторого рефакторинга. Затем вы застреваете, поскольку полное имя старого класса больше недействительно. Невозможно вернуть объект из потока.

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