S.start();
t.start(); }
VI. Серіалізація об’єктів
Методи класів ObjectlnputStream і ObjectOutputStream дозволяють прочитати із вхідного байтового потоку або записати у вихідний байтовий потік дані складних типів — об’єкти, масиви, рядки — подібно тому, як методи класів Datainputstream і DataOutputstream, що читають і записують дані простих типів. Схожість підсилюється тим, що клас Objectxxx містить методи як для читання, так і запису простих типів. Між іншим, ці методи призначені не для використання в програмах, а для запису-читання полів об’єктів і елементів масивів.
Процес запису об’єкта у вихідний потік отримав назву серіалізації(serialization), а читання об’єкта із вхідного потоку і відновлення його в оперативній пам’яті — десеріалізації(deserialization).
Серіалізація об’єкта порушує його безпеку, оскільки будь-який процес може серіалізувати об’єкт в масив, переписати деякі елементи масиву, представляючі private-поля об’єкта, забезпечивши собі, наприклад, доступ до секретного файлу, а потім десеріалізувати об’єкт із зміненими полями і здійснювати з ним недопустимі дії.
Тому серіалізувати можна не кожний об’єкт, а тільки той, котрий реалізує інтерфейс serializable. Цей інтерфейс не містить ні полів, ні методів. Реалізувати в ньому нема чого. По суті запис:
class A implements SeriaiizabІe{...}
це тільки мітка, дозволяюча серіалізацію класу А. Як завжди в Java, процес серіалізації максимально автоматизований. Досить створити об’єкт класу ObjectOutputStream, зв’язавши його з вихідним потоком, і вивести в цей потік об’єкти методом writeObject():
MyClass me = new MyClass("abc", -12, 5.67e-5);
int[] arr = {10, 20, 30};
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("myobjects.ser")) ;
Дата добавления: 2014-12-10; просмотров: 686;