Отправка объекта через сокет, когда получатель не имеет своего класса - PullRequest
0 голосов
/ 02 июня 2019

У меня есть сервер, который получает некоторый объект от клиента и позже отправляет этот объект клиенту.
проблема в том, что сервер не обязательно имеет класс этого объекта, поэтому сериализация этого объекта в клиенте и отправка его на сервер и чтение его с помощью ObjectInputStream приведут к исключению ClassNotFoundException.

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

вот код, который сериализует и отправляет объект через сокет в клиенте (session.dos - это сокет DataOutputStream)

ObjectOutputStream oos = new ObjectOutputStream(Connector.session.dos);
oos.writeObject(Connector.session.game);

что я могу сделать, чтобы прочитать неизвестный объект на сервере?
или это сериализация неправильный подход вообще? тогда что мне делать?

1 Ответ

0 голосов
/ 04 июня 2019

Если вы придерживаетесь другого и интересного подхода, вы могли бы сделать хуже, чем использовать Apache Avro (обязательно найдется его вариант на Java). Причина в том, что формат проводов в Avro содержит исходную схему IDL (которая на самом деле является JSON в случае Avro). Это означает, что получателю не обязательно когда-либо видеть схему, чтобы получать сериализованные данные и интерпретировать данные. Таким образом, вы можете получать сериализованные классы Avro в виде байтового массива, хранить их и игнорировать содержимое, но на случай, если вы когда-нибудь передумали, данные могут быть интерпретированы.

Если это интересно, есть страница начала работы здесь .

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