Если у меня есть Экземпляр класса во времени выполнения, я могу получить его байт [] представление? Байты, которыми я интересуюсь, были бы в формате файла Класса, таком, что они будут допустимым входом к [ClassLoader.defineClass][3].
[3]: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ClassLoader.html#defineClass (java.lang. Строка, байт [], интервал, интервал)
Править: Я принял ответ getResourceAsStream, потому что это очень просто и будет работать большую часть времени. ClassFileTransformer походит на большее надежное решение, потому что он не требует, чтобы классы были загружены из .class файлов; это обработало бы загруженные сетью классы, например. Существует несколько обручей для перехода через с тем подходом, но я удержу в памяти. Спасибо все!
Вы обычно можете просто загрузить класс в качестве ресурса от классы.
Class c = ...
String className = c.getName();
String classAsPath = className.replace('.', '/') + ".class";
InputStream stream = c.getClassLoader().getResourceAsStream(classAsPath);
Я бы, вероятно, рекомендовал использовать что-то из Apache Commons-io, чтобы прочитать входную поток в байт []
, но IOUTILS.TOBYTEARRAY ()
должен сделать трюк. Написание того, что код действительно легко ошибочно и / или сделать медленно.
В целом вы не можете вернуться так. Однако для некоторых классовых погрузчиков вы можете получить файл ресурсов, чтобы получить полностью квалифицированное имя класса, замена .
С /
/ и добавлением .Class
(так MyPackage.myclass
становится MyPackage / myclass.class
(запомнить, может быть случай чувствительный)).
Вы можете попробовать Java . ! В частности, ClassFileTrensformer Может быть, интерес для вас !!
Вы просто переопределяете метод преобразования (из класса CILLETRANSFORMER), и ваш метод преобразования будет вызываться, прежде чем каждый класс загружен. Итак, вы, CNA, делаете любые байты класса.
Интересно...
Может ли загрузка «.class» в виде файла дать необходимые входные данные? Другими словами, я считаю, что вам нужен файл, который был скомпилирован с помощью javac или другого компилятора.