作为练习的一部分,我必须编写一个远程类加载器。它从服务器下载一个类,然后使用defineClass加载它。转换为byte []和String.getBytes
我所做的就是这样的:
in=new ObjectInputStream(s.getInputStream());
Object o = in.readObject();
return defineClass(className,o.toString().getBytes(), 0, o.toString().length());
而且我得到了一个java.lang.ClassFormatError: Incompatible magic value
但是,当我写这篇
in=new ObjectInputStream(s.getInputStream());
byte[] classData=(byte[])in.readObject();
return defineClass(className,classData, 0, classData.length);
它的工作如预期。
这是为什么?如果你调用toString
上array
对象,然后它会回报你default toString
'toString'不编码对象的字节 - 它返回一个包含关于对象信息的字符串。 –