Ответ 1
Да, это общая проблема. Adobe рекомендует, чтобы тип Java, который имеет неизменные свойства, реализует Externalizable, а эквивалентный тип ActionScript реализует IExternalizable.
У меня есть сложный объект, которым управляет управление данными LCDS DataServices и создается/обновляется и т.д., используя пользовательские ассемблеры. Подавляющее большинство иерархии объектов сериализуется/десериализовано правильно, но я попал в камнем преткновения, когда дело доходит до сериализации неизменяемых классов Java.
В java только мире я бы использовал java writeReplace и readResolve, так как этот отличный блог описывает: http://lingpipe-blog.com/2009/08/10/serializing-immutable-singletons-serialization-proxy/
Вот как я изначально написал свой класс java, ожидая, что жизненный цикл вызовет метод writeReplace и должным образом заменит неизменяемый класс на изменчивый для сериализации. Однако, похоже, что lcds ничего не знают о методе writeReplace и будут вызывать только readExternal/writeExternal, игнорируя readResolve и writeReplace.
Во-первых, если другие считают, что это так, или я что-то упускаю?
Во-вторых, кто-нибудь придумал подходящий метод для десериализации классов ActionScript либо в неизменяемых объектах, либо в одиночных точках?
Большое спасибо
Да, это общая проблема. Adobe рекомендует, чтобы тип Java, который имеет неизменные свойства, реализует Externalizable, а эквивалентный тип ActionScript реализует IExternalizable.
Нет плана обработки writeReplace и readResolve, но вы можете запросить запрос функции http://bugs.adobe.com/jira/browse/BLZ
При реализации вашей пользовательской сериализации заботитесь о том, что вы потеряете некоторые преимущества, такие как сжатие чисел и идентификация повторяющихся строк. Одна из идей - взглянуть на реальный механизм сериализации и соответствующим образом изменить его.
Однако, если вам интересно только сериализовать свойства только для чтения, это усовершенствование было реализовано в BlazeDS, посмотрите здесь: http://bugs.adobe.com/jira/browse/BLZ-427
Самый короткий и наиболее полный ответ, который я нашел: http://expertdevelopers.blogspot.com/2010/07/serializable-vs-externalizable.html