2009-04-02 2 views
7

Просто хочу знать, есть ли учебное пособие или инструкции для сериализации объектов, помещения их в поток по сети и десериализации его с другой стороны. Я понимаю принципы сериализации, ввода-вывода, потоков, сокетов и т. Д. Мне просто хотелось бы, чтобы клиент, отправляющий объект на сервер, начинал с него.Сериализация Java по сети

ответ

9

This (pdf) - полезный учебник, в котором вы познакомитесь с основами сериализации и сокетов, затем объединяете эти два понятия (примерно на полпути через слайды), чтобы показать, как сериализовать объект и отправить его с клиента на сервер (без RMI). Я думаю, это именно то, что вы хотите.

+0

Действительно показать, как использовать сериализацию и разъемы, спасибо! – elbaid

7

Его довольно простой, на самом деле. Просто сделайте ваши объекты сериализуемыми и создайте ObjectOutputStream и ObjectInputStream, которые связаны с любым базовым потоком, который у вас есть, например FileInputStream и т. Д. Затем просто напишите() любой объект, который вы хотите передать, и прочитайте его с другой стороны.

Heres a example для вас.

+1

Вы могли бы хотеть быть немного более осторожным о закрытии ресурсов, чем этот пример. –

5

Java обеспечивает (двоичную) сериализацию объектов с использованием ObjectOutputStreamObjectInputStream). Вы можете просто записатьObject() в поток и readObject() на другом конце. Все, что вам нужно для этого, это реализовать интерфейс Serializable.

Но вместо того, чтобы делать это вручную, вам может быть интересно подняться на один уровень вверх и использовать Remote Method Invocation. С помощью RMI вы можете вызывать методы для объектов, которые живут в другой JVM, и вся сериализация и создание сетей происходят под капотом.

И для полноты, есть также XML bean serialization, если вы не можете использовать двоичный формат. Этот формат XML очень общий (читается: подробный и уродливый), но есть некоторые популярные библиотеки (например, XStream), которые создают альтернативные сериализации XML.

+0

XStream также предлагает сериализацию JSON (с Jettison), которая может быть очень полезна в кросс-языковых проектах: www.json.org – mjn

+0

Никогда не слышал о RMI, кажется, что WCF в технологии Microsoft, надеюсь, что я не ошибаюсь ... Спасибо за идею! – elbaid

2

вы можете создавать потоки объектов с помощью 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(); 
Смежные вопросы