Язык SQL

Содержимое файла с тремя сериализованными объектами Movie


Понятно, что это представление объекта гораздо более сложное, чем представление, полученное с помощью метода write и класса DataStream. Следующая цитата из документации по языку Java, относящаяся к классу ObjectOutputStream, дает некоторые пояснения содержимому файла.

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

Большая часть содержимого потока не имеет очевидного смысла, но некоторые узнаваемые элементы выделены. Например, фраза dbjava.files.Movie (имя класса) начинается с байта 0×08, а несколько позднее выделены имена полей класса Movie: начиная с байта 0×28 — movield, с байта 0×32 — genre, а с байта 0x4f — title. Выделенная фраза java/lang/String начинается с байта ОхЗЬ, после genre и title. Из данного рисунка можно заключить, что файл содержит спецификацию класса Movie вместе с именами и типами полей. Поля расположены не в том порядке, который задан в определении класса.

Каждое имя поля представляется полем с указанием длины. Выделенные байты 0×26 и 0×27 имеют значение 0×0007, обозначающее длину следующей строки movield. Можно также увидеть двухбайтовые поля длины перед другими именами полей и типов.

Рассмотрев выделенный текст в байте ОхбЬ, можно увидеть значение movield, представленное в виде четырехбайтового целого числа 0x000000bd. В байте 0×70 находится значение genre, представленное в виде текстового поля с указанием длины: 0×0006 в байте 0×70. В следующих шести байтах находится слово comedy.

Комментарии закрыты