Просто хочу знать, есть ли учебное пособие или инструкции для сериализации объектов, помещения их в поток по сети и десериализации его с другой стороны. Я понимаю принципы сериализации, ввода-вывода, потоков, сокетов и т. Д. Мне просто хотелось бы, чтобы клиент, отправляющий объект на сервер, начинал с него.Сериализация Java по сети
ответ
This (pdf) - полезный учебник, в котором вы познакомитесь с основами сериализации и сокетов, затем объединяете эти два понятия (примерно на полпути через слайды), чтобы показать, как сериализовать объект и отправить его с клиента на сервер (без RMI). Я думаю, это именно то, что вы хотите.
Его довольно простой, на самом деле. Просто сделайте ваши объекты сериализуемыми и создайте ObjectOutputStream и ObjectInputStream, которые связаны с любым базовым потоком, который у вас есть, например FileInputStream и т. Д. Затем просто напишите() любой объект, который вы хотите передать, и прочитайте его с другой стороны.
Heres a example для вас.
Вы могли бы хотеть быть немного более осторожным о закрытии ресурсов, чем этот пример. –
Java обеспечивает (двоичную) сериализацию объектов с использованием ObjectOutputStream (и ObjectInputStream). Вы можете просто записатьObject() в поток и readObject() на другом конце. Все, что вам нужно для этого, это реализовать интерфейс Serializable.
Но вместо того, чтобы делать это вручную, вам может быть интересно подняться на один уровень вверх и использовать Remote Method Invocation. С помощью RMI вы можете вызывать методы для объектов, которые живут в другой JVM, и вся сериализация и создание сетей происходят под капотом.
И для полноты, есть также XML bean serialization, если вы не можете использовать двоичный формат. Этот формат XML очень общий (читается: подробный и уродливый), но есть некоторые популярные библиотеки (например, XStream), которые создают альтернативные сериализации XML.
вы можете создавать потоки объектов с помощью java api и отправлять любой сериализуемый объект. но вы будете иметь в виду, что они идут в незашифрованном виде через сеть:
на стороне отправителя:
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();
Действительно показать, как использовать сериализацию и разъемы, спасибо! – elbaid