русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Ключевое слово transient


Дата добавления: 2015-06-12; просмотров: 1062; Нарушение авторских прав


При управлении процессом сериализации может возникнуть ситуация, при которой автоматическое сохранение и восстановление некоторого подобъекта нежелательно — например, если в объекте хранится некоторая конфиденциальная информация (пароль и т. д.). Даже если информация в объекте описана как закрытая (private), это не спасает ее от сериализации, после которой можно извлечь секретные данные из файла или из перехваченного сетевого пакета.

Первый способ предотвратить сериализацию некоторой важной части объекта — реализовать интерфейс Externalizable, что уже было показано. Тогда автоматически вообще ничего не записывается, и управление отдельными элементами находится в ваших руках (внутриwriteExternal).

Однако работать с объектами Serializable удобнее, поскольку сериализация для них проходит полностью автоматически. Чтобы запретить запись некоторых полей объекта Serializable, воспользуйтесь ключевым словом transient. Фактически оно означает: «Это не нужно ни сохранять, ни восстанавливать — это мое дело».

Для примера возьмем объект Login, который содержит информацию о некотором сеансе входа в систему, с вводом пароля и имени пользователя. Предположим, что после проверки информации ее необходимо сохранить, выборочно, без пароля. Проще всего удовлетворить заявленным требованиям, реализуя интерфейс Serializable и объявляя поле с паролем password как transient. Вот как это будет выглядеть:

//: io/Logon.java

// Ключевое слово "transient".

import java.util.concurrent.*;

import java.io.*;

import java.util.*;

import static net.mindview.util.Print.*;

 

public class Logon implements Serializable {

private Date date = new Date();

private String username;

private transient String password;

public Logon(String name, String pwd) {

username = name;



password = pwd;

}

public String toString() {

return "logon info: \n username: " + username +

"\n date: " + date + "\n password: " + password;

}

public static void main(String[] args) throws Exception {

Logon a = new Logon("Hulk", "myLittlePony");

print("logon a = " + a);

ObjectOutputStream o = new ObjectOutputStream(

new FileOutputStream("Logon.out"));

o.writeObject(a);

o.close();

TimeUnit.SECONDS.sleep(1); // Delay

// Now get them back:

ObjectInputStream in = new ObjectInputStream(

new FileInputStream("Logon.out"));

print("Recovering object at " + new Date());

a = (Logon)in.readObject();

print("logon a = " + a);

}

}

<spoiler text="Output:"> (Sample)

logon a = logon info:

username: Hulk

date: Sat Nov 19 15:03:26 MST 2005

password: myLittlePony

Recovering object at Sat Nov 19 15:03:28 MST 2005

logon a = logon info:

username: Hulk

date: Sat Nov 19 15:03:26 MST 2005

password: null

</spoiler> Поля date и username не имеют модификатора transient, поэтому сериализация для них проводится автоматически. Однако поле password описано как transient и поэтому не сохраняется на диске; механизм сериализации его также игнорирует. При восстановлении объекта поле password равно null. Заметьте, что при соединении строки (String) со ссылкой null перегруженным оператором + ссылка null автоматически преобразуется в строку null. Также видно, что поле date сохраняется на диске и при восстановлении его значение не меняется. Так как объекты Externalizable по умолчанию не сохраняют полей, ключевое слово transient для них не имеет смысла. Оно применяется только для объектов Serializable.

 



<== предыдущая лекция | следующая лекция ==>
Управление сериализацией | Альтернатива для Externalizable


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.035 сек.