Главная » Java » Байтовые потоки Object в Java

0

 

  Потоки Object— ObjectlnputStream и ObjectOutputStream, — помимо данных стандартных классов (простых типов, строк и их массивов), позволяют вводить и выводить графы объектов (object graphs). Употребляя термин граф объекта, мы имеем в виду, что когда содержимое объекта выводится в поток ObjectOutputStream средствами методов writeObject, в потоке сохраняются наборы байтов, представляющие и текущий объект, и все другие объекты, на который тот ссылается. Процесс преобразования объекта в поток байтов называют сериализацией объекта. Поскольку данные об объекте, подвергшемся сериализации, представляются в форме байтов, в семействе потоков Object отсутствуют символьные разновидности Reader и Writer.

  Результатом ввода {десериализации) последовательности байтов, представляющих ранее сериализованный объект, из потока ObjectlnputStream с помощью методов readObject служит граф объекта, равнозначный исходному.

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

 

Fileoutputstream fileout = new Fileoutputstream("tab");

ObjectOutputStream out = new ObjectOutputStream(fileOut);

 HashMap hash = getHashMap();

out.writeobject(hash);

 

Как нетрудно заметить, подход достаточно прямолинеен. Единственного вызова Writeobject(hash) достаточно для того, чтобы сохранить содержимое хеш-таблицы в целом, включая все ее элементы, все объекты, на которые ссылаются

 эти элементы, и т.д. — до тех пор, пока не будет достигнут и преобразован каждый объект графовой структуры. Создание копии исходного объекта, восстанов-

  енной на основе сохраненной последовательности байтов, может быть выполне-Но следующим образом:

 

FTleinputStream fileIn = new FileinputStream(“tab");

 ObjectlnputStream in = new objectinputstream(filein);

HashMap newHash =  (HashMap)   in.readobject();

 

   В процессе сериализации целостность графа сохраняется. Предположим н пример, что в сериализованной хеш-таблице некоему объекту было поставлено соответствие два различных ключа. При десериализации хеш-таблицы два аналогичных элемента в ее копии будут обладать ссылками на единственный экземпляр объекта po3a.jpg, а не на две различных его копии.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии