2 отступа пространства.
Никакое обсуждение. Это просто должен быть тот путь ;-)
http://java.sun.com/javase/6/docs/platform/serialization/spec/security.html
РЕЗЮМЕ: Предотвращение сериализации Поля конфиденциальных данных, содержащие конфиденциальные данные не должны быть сериализованный; это обнажает их ценности для любой стороны, имеющей доступ к поток сериализации. Есть несколько методов предотвращения поля от сериализации:
- Объявить поле как частное переходное.
- Определите serialPersistentFields. поле рассматриваемого класса и исключить поле из списка дескрипторы полей.
- Напишите сериализацию для конкретного класса метод (например, writeObject или writeExternal), который не пишет поле для сериализации поток (т. е. не вызывая ObjectOutputStream.defaultWriteObject).
Вот несколько ссылок.
Объявление serialPersistenetFields.
Если по какой-то причине переходный процесс не подходит, вы можете выполнить сериализацию напрямую, переопределив методы writeObject и readObject . Затем вы можете включить или опустить любые поля, которые вам нужны.
Вот что означает переходный процесс как ключевое слово. Вся его цель - остановить сериализацию данных по любой причине.
Если вам нужен более тонкий контроль над процессом, вы можете использовать методы writeObject / readObject, которые ObjectOutputStream / ObjectInputStream используют как часть процесса сериализации, и вы можете комбинировать это с некоторыми настраиваемыми аннотациями или любой логикой, какой захотите.
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException
Вы можете создать свой собственный протокол с помощью интерфейса Externalizable , который, на мой взгляд, лучше, чем Serializable, поскольку он не содержит частных методов, подключаемых JVM ( writeObject
и readObject
). Вместо реализации интерфейса Serializable
вы можете реализовать Externalizable
, который содержит два метода:
public void writeExternal(ObjectOutput out) throws IOException;
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
В отличие от использования Serializable
сейчас ничего не предоставляется бесплатно. То есть протокол полностью в ваших руках , при этом переходные / нетриансные поля перекрываются и т. Д.