Я использую настроенную версию Автор DX . Я нашел простым использовать, чрезвычайно легкий изменить, и это имеет руководство пользователя (с яркими примерами) , который очень похож для Кодирования Воспламенителя.
Простое знание того, что сериализованный внутренний класс имеет неявную ссылку на содержащий его объект, будет иметь большое значение. Эта ссылка действительно имеет ряд значений:
переходной
Вероятно, главный принцип, который я могу усвоить, - это «не сериализовать внутренние классы, кроме как из содержащих их объектов». Я не могу вспомнить больше подводных камней.
Мысль. Если ваш внешний класс включает (непреходящую) коллекцию экземпляров внутреннего класса, то каждый раз, когда вы сериализуете один из экземпляров внутреннего класса, вы фактически будете втягивать их все в сериализацию.
Внутренний класс содержит ссылку на свой внешний класс, поэтому попытка сериализации внутреннего также будет сериализовать внешний - а также любые другие предметы, которые может удерживать внешний. Это могло привести к огромному графу объекта. Или он может выйти из строя, если внешний объект имеет состояние, которое не может быть сериализовано (например, объект InputStream).
Тем не менее, бывают случаи, когда вам нужно сделать внутренние классы сериализуемыми, даже если вы никогда не планируете их сериализовать . Например, если вы работаете с Swing.
Если вы действительно планируете сериализовать эти объекты, я бы задал вопрос, почему они должны быть внутренними классами независимо от производительности. Как правило, вы re будет только сериализовать контейнеры данных, и таким контейнерам редко (если вообще когда-либо) нужна ссылка на какой-то «родительский» класс. Попробуйте сделать эти объекты вложенными (статическими) классами, а не внутренними.
Вы можете сделать класс Externalizable и написать свои собственные методы writeExternal и readExternal, которые будут отправлять только те поля, которые вам нужны.
http://java.sun.com/javase/6/ docs / api / java / io / Externalizable.html