Программа просмотра Java-классов (Java Class Viewer)

ОГЛАВЛЕНИЕ

Введение

Для начинающего не так легко понять спецификацию VM; программа просмотра Java-классов - это мощное приложение, которое может показать значение каждого байта в файле класса.

Основы

Вам стоит опустить данную часть статьи если вас не интересует история данного просмотрщика классов Java.

1. Причина создания программы просмотра Java-классов (jCV)

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

Итак, мы решили написать программу по просмотру Java-классов, которая может отображать визуально файл класса, а также отображать значение каждого байта данного файла класса. Это и является назначением приложения по просмотру Java-классов (Java Class Viewer - jCV).  

2. Библиотека файлов Java-классов (jCFL)  

При создании графического приложения было замечено, что данное приложение может быть разделено на две части:  

  1. Библиотеку файлов Java-классов (jCFL). Она анализирует файл массива байтов класса, предоставляет различные классы-помощники, которые могут помочь в получении информации обрабатываемого класса, а также предоставляет некоторые полезные элементы управления графическим интерфейсом UI для программы анализатора Java-классов. Она может предоставить больше полезной информации чем сообщения об ошибках Sun JDK javac в случае, если файл класса будет проблематичным.
  2. Программу просмотра Java-классов (Java Class Viewer). Это приложение, которое использует библиотеку jCFL для предоставления графического представления файла класса.   

Итак, на данный момент у нас две компоненты - библиотека jCFL и программа jCV.

Еще одной причиной для этого разделения будет то, что jCFL может также быть использована в других областях, как анализ мета данных файла класса.

Связанные библиотеки 

Существует еще одна библиотека, применяемая для проверки и сборки файла класса, такая как Byte Code Engineering Library (BCEL) из Apache. Основы разработки jCFL отличаются от BCEL. BCEL - это мощная библиотека для редактирования/изменения файлов Java-классов, а также в BCEL доступен просмотрщик файлов класса.   

Практически невозможно использовать BCEL для написания программы просмотра файлов класса, которая смогла бы показывать также значения каждого байта, поскольку она не записывает расположение при анализе файла класса. BCEL был разработан согласно авторской идее, при этом идея и соглашение об именах не следуют спецификации JVM, в частности структуре файлов класса (Class File Structure).  

jCFL может редактировать файлы классов, записывая смещение файла при анализе, при этом следуя структуре ClassFile согласно спецификации JVM.

Если вы будете использовать jCV при чтении спецификации JVM Spec, то вам будет значительно легче понять файл класса.