Ключевое слово transient
в Java используется для обозначения того, что поле не должно быть частью процесса сериализации (что означает сохранение подобно в файл).
Из Спецификации языка Java, Java SE 7 Edition , Раздел 8.3.1.3. transient
Поля :
Переменные могут быть помечены transient
в
указывают, что они не являются частью
постоянное состояние объекта.
Например, у вас могут быть поля, которые получены из других полей, и должны выполняться только программно, а не сохраняться в состоянии посредством сериализации.
Вот класс GalleryImage
, который содержит изображение и миниатюру, полученную из изображения:
class GalleryImage implements Serializable
{
private Image image;
private transient Image thumbnailImage;
private void generateThumbnail()
{
// Generate thumbnail.
}
private void readObject(ObjectInputStream inputStream)
throws IOException, ClassNotFoundException
{
inputStream.defaultReadObject();
generateThumbnail();
}
}
В этом примере thumbnailImage
- это миниатюрное изображение, которое генерируется с помощью метода generateThumbnail
.
Поле thumbnailImage
помечено как transient
, поэтому только оригинал image
сериализуется, а не сохраняется как исходное изображение и эскизное изображение. Это означает, что для сохранения сериализованного объекта потребуется меньше места. (Конечно, это может или не может быть желательным в зависимости от требований системы - это только пример.)
Во время десериализации вызывается метод readObject
для выполнения любых операций, необходимых для восстановления состояния объекта обратно в состояние, в котором произошла сериализация. Здесь необходимо создать миниатюру, поэтому метод readObject
будет переопределен, чтобы миниатюра была сгенерирована путем вызова метода generateThumbnail
.
Для получения дополнительной информации в статье Откройте для себя секреты Java Serialization API (которая изначально была доступна в Sun Developer Network) есть раздел, в котором обсуждается использование и представлен сценарий, в котором transient
ключевое слово используется для предотвращения сериализации определенных полей.