作爲練習的一部分,我必須編寫一個遠程類加載器。它從服務器下載一個類,然後使用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'不編碼對象的字節 - 它返回一個包含關於對象信息的字符串。 –