Десериализация объекта без доступа к байт-коду класса в Java - PullRequest
1 голос
/ 19 февраля 2012

Я пытаюсь отправить самоопределенный объект serializable через сетевой сокет и десериализовать на другой стороне.Вот определение класса, который я хочу отправить:

public class Test implements implements Runnable, Serializable{
    public void run() {
        System.out.println("Hello!");
    }
}

Я хочу восстановить этот класс на другом конце, не имея доступа к классу bytecode, просто приведя его к Runnable.К сожалению, это дает мне ClassNotFoundException исключение.Есть ли обходной путь, который я могу десериализовать объект без доступа к классу bytecode?

Ответы [ 3 ]

3 голосов
/ 19 февраля 2012

Не совсем.Однако вы можете предоставить файлы jar через http-сервер, а затем запустить клиент с системным свойством java.rmi.server.codebase, равным списку URL-адресов, из которых RMI будет загружать классы.

1 голос
/ 19 февраля 2012

То, что вы спрашиваете, невозможно.

Java Serialization api отправляет поля данных внутри объекта и некоторую служебную информацию.Поля данных отправляются в компактной форме.Со стороны получателя объект конструируется обратно с этими значениями полей данных.

Думайте об этом как о том, что вы обычно создаете объект и конструктор инициализирует ваши поля.Здесь Java Serialization выполняет работу конструктора, но вам все еще нужны определения классов, которые содержат байт-код для методов и т. Д.

0 голосов
/ 09 июля 2012

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

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