Используйте ObjectOutputStream на передающей стороне и ObjectInputStream на принимающей стороне.
Чтобы быть немного более понятным, вот пример (без обработки исключений).
отправляющая сторона:
dataStruct ds = ...;
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(ds);
oos.close();
принимающая сторона:
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
Object o = ois.readObject();
if(o instanceof dataStruct) {
dataStruct ds = (dataStruct)o;
// do something with ds
}
else {
// something gone wrong - this should not happen if your
// socket is connected to the sending side above.
}
Так что да, вы должны приводить на принимающей стороне, чтобы компилятор знал правильный класс.(Приведение не меняет класс объекта, а только изменяет знания компилятора о нем.)
Эта сериализация также используется для сохранения объектов в файл.Конечно, это дает только возможность взаимодействия с Java, если у вас есть не-Java-партнер, вы можете использовать собственный протокол сериализации или какой-либо формат на основе XML.