Сериализации Java по сети
просто хочу знать, если есть руководство или инструкции, используемые для сериализации объектов, помещая их в поток по сети, и десериализовать его на другой стороне. Я понимаю принципы сериализации, ввода-вывода, потоков, сокетов и так далее, я просто хотел бы пример клиента, отправляющего объект на сервер для начала.
4 ответов
этой (pdf) является полезным учебником, который проведет вас через основы сериализации и сокетов, а затем связывает две концепции вместе (примерно на полпути через слайды), чтобы показать, как сериализовать объект и отправить его с клиента на сервер (без RMI). Я думаю, это именно то, чего ты хочешь.
его довольно просто, на самом деле. Просто сделайте ваши объекты сериализуемыми и создайте ObjectOutputStream и ObjectInputStream, которые связаны с любым базовым потоком, который у вас есть, скажем FileInputStream и т. д. Затем просто напишите () любой объект, который вы хотите в поток, и прочитайте его с другой стороны.
Heres an пример для вас.
Java обеспечивает (двоичную) сериализацию объектов с помощью ObjectOutputStream (и ObjectInputStream). Вы можете просто записать writeObject() в поток и readObject () на другом конце. Все что вам нужно сделать для этого-это реализовать интерфейс Serializable.
но вместо того, чтобы делать это вручную, вам может быть интересно взять его на один уровень выше и использовать Удаленный Вызов Метода. С помощью RMI вы можете вызывать методы для объектов, которые живут в другой JVM, и вся сериализация и сетевое взаимодействие происходит под капотом.
и для полноты, есть также XML bean сериализация, Если вы не можете использовать двоичный формат. Этот формат XML очень общий (читай: подробный и уродливый), но есть некоторые популярные библиотеки (например,кинокомпании xStream), которые создают альтернативные сериализации XML.
вы можете создавать потоки объектов с помощью api java и отправлять любой сериализуемый объект. но вы должны иметь в виду, что они идут незашифрованные через сеть:
со стороны отправителя:
CustomObject objectToSend=new CustomObject();
Socket s = new Socket("yourhostname", 1234);
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
out.writeObject(objectToSend);
out.flush();
и на приемном конце:
ServerSocket server = new ServerSocket(1234);
Socket s = server.accept();
ObjectInputStream in = new ObjectInputStream(s.getInputStream());
CustomObject objectReceived = (CustomObject) in.readObject();