Я пытаюсь оценить полезность использования объектов Serialized в приложении Java, которое я разрабатываю. Я пытаюсь определить, имеет ли значение смысл для реализации сериализации Object, или если я должен настраивать транспорт. Вот мой сценарий:Сериализация объектов Java
- Объекты будут транспортироваться через TCP из одного приложения в другое.
- Сериализованный объект будет экземпляром класса, хранящегося в общей библиотеке.
образца Класс:
public class Room implements Serializable {
// Instance Variables
private Room roomWithinRoom;
// ...
}
Так что мой вопрос заключается в том, что, так как у меня будет несколько переменных экземпляра, которые ссылаются обратно в класс номер, можно использовать Java сериализацию для выполнения передачи объектов в номере? Если я смогу выполнить это, будут ли указатели сохранены?
Пример:
Room mainRoom = new Room();
Room closet = new Room();
mainRoom.addRoom(closet);
Если я посылаю над объектом «mainRoom,» будет также сериализовать и отправить «шкаф» экземпляр
Спасибо (сохранение переменной экземпляра roomWithinRoom в mainRoom?) пучок, все!
Я не вижу, что TCP связано с вызовом reset(), и поскольку он хочет сохранить ссылки, я не вижу, почему вы рекомендуете reset() вообще. Для преодоления изменений класса вам не требуется Externalizable: в Спецификации сериализации объектов есть большая глава, которая определяет совместимость различных изменений, которая намного более обширна, чем кажется большинству людей, даже если они ее прочитали. – EJP
@EJP: Вы хотите, чтобы ссылки сохранялись в одной записи. Вы отправляете один объект и включаете остальную часть своего графа объектов. Это то, что вы хотите. Обновите объекты в графике и отправьте их один раз, и ObjectOutput отметит, что он уже отправил их и ничего не делает, кроме как отправить сообщение, чтобы повторить предыдущий вывод. Никакие новые данные не будут переданы. – RalphChapin
@EJP: Другая проблема заключается в том, что ObjectOutput и Input никогда не забудут объект. Если вы отправляете кучу несвязанных объектов, каждый из них пройдет, но все они будут помнить. Если вы подключены в течение нескольких рабочих часов, это может использовать много памяти на обоих концах. (И если вы повторяете объект, читатель получает первый отправленный, последние данные копии не пройдут.) – RalphChapin