Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将类对象转换为字节_Java_Classloader - Fatal编程技术网

Java 将类对象转换为字节

Java 将类对象转换为字节,java,classloader,Java,Classloader,如果我在运行时有一个实例,我可以得到它的byte[]表示吗?我感兴趣的字节将在中,这样它们将是[ClassLoader.defineClass][3]的有效输入 [3] :,字节[],整数,整数) 编辑:我已经接受了getResourceAsStream的答案,因为它非常简单,大多数时候都可以使用。ClassFileTransformer似乎是一个更健壮的解决方案,因为它不需要从.class文件加载类;例如,它将处理网络加载的类。这种方法有一些困难需要克服,但我会记住的。谢谢大家 一般来说,你不

如果我在运行时有一个实例,我可以得到它的byte[]表示吗?我感兴趣的字节将在中,这样它们将是[ClassLoader.defineClass][3]的有效输入

[3] :,字节[],整数,整数)


编辑:我已经接受了getResourceAsStream的答案,因为它非常简单,大多数时候都可以使用。ClassFileTransformer似乎是一个更健壮的解决方案,因为它不需要从.class文件加载类;例如,它将处理网络加载的类。这种方法有一些困难需要克服,但我会记住的。谢谢大家

一般来说,你不能那样回去。但是,对于某些类加载器,您可能能够获取资源文件,使用完全限定的类名,将
替换为
/
,并附加
.class
(因此
mypackage.MyClass
变成
mypackage/MyClass.class
(请记住,可能区分大小写)).

您通常可以将类作为资源从类加载器中加载

Class c = ...
String className = c.getName();
String classAsPath = className.replace('.', '/') + ".class";
InputStream stream = c.getClassLoader().getResourceAsStream(classAsPath);
我可能会建议使用ApacheCommons io中的某些内容将输入流读入
字节[]
,但是
IOUtils.toByteArray()
应该可以做到这一点。编写这些代码很容易出错和/或变慢。

你可以试试java!你可能特别感兴趣


您只需重写transform方法(来自ClassFileTransformer),在加载每个类之前将调用transform方法。因此,你可以做任何类字节。

利用。

另请参阅,当我以
ByteArrayInputStream
的形式收到此消息时,如何在另一端编译该类。从字节创建类是类加载器的工作。嗨,如果该类是代理类,则可以在运行时生成并存储在内存中,我们如何将其保存到文件中?如何进行反向操作?也就是说,将字节[]转换为java.lang.Class?在内部类上不起作用。