Как читать файл .class?

Мне нужно прочитать содержимое файла .class java в моей программе java или есть ли какой-либо метод, доступный для чтения того же самого. На самом деле я хочу получить таблицу локальных переменных, таблицу номеров строк и т. д. из файла .class java, но я Я не получаю никакого метода, чтобы прочитать то же самое?


person Neha    schedule 01.04.2011    source источник


Ответы (3)


Я хочу получить таблицу локальных переменных, таблицу номеров строк и т. д.

Чтобы прочитать их, вам понадобится ASM, BCEL или аналогичная библиотека байт-кода. API отражения Java не говорит вам об этом.

person Esko Luontola    schedule 01.04.2011

Вам понадобится декомпилятор Java или что-то вроде что

person RoflcoptrException    schedule 01.04.2011
comment
Нет, на самом деле мы должны написать чистый код Java. Нам не нужно использовать какой-либо инструмент - person Neha; 02.04.2011
comment
В основном мой проект заключается в создании тестовых случаев с использованием тестирования белого ящика. Обычно наши NetBeans или eclipse имеют свои собственные редакторы, где они могут компилировать свой код, а также генерировать тестовые примеры. Но что нам нужно сделать, это прочитать сохраненный файл .java на диске в любом месте и сгенерировать тестовые примеры. И для этого мы на самом деле ищем, как получить символы, их тип данных, их значение и т. д. И я думал прочитать файл .class, поскольку он содержит таблицу локальных переменных , таблица номеров строк и т. д. И поэтому мы не используем никаких инструментов - person Neha; 02.04.2011

Вы можете получить эту информацию, используя BCEL.

Библиотека разработки байт-кода предназначена для того, чтобы предоставить пользователям удобную возможность анализировать, создавать и манипулировать (двоичными) файлами классов Java (оканчивающимися на .class). Классы представлены объектами, которые содержат всю символьную информацию данного класса: методы, поля и инструкции байт-кода, в частности.

Или вы также можете использовать Reflection API для получения информации из файла класса.

person jmj    schedule 01.04.2011
comment
ASM гораздо больше поддерживается, используйте его. - person MeBigFatGuy; 02.04.2011
comment
Отражение получает информацию не из файла класса, а из объекта класса (после того, как загрузчик класса выполнил свою работу) - person Thorbjørn Ravn Andersen; 30.04.2013