2013-12-14 81 views
0

我試圖反序列化對象,其中:從標準JVM傳遞序列化的外部化對象CodenameOne

  • 創建並連載於另一個標準JVM(服務器)
  • 實現傳統的Java Externalizable接口
  • 通過了在網絡
public static void getData() { 
    ConnectionRequest req = new ConnectionRequest() { 
     @Override 
      protected void readResponse(InputStream is) throws IOException { 
      DataInputStream dis = new DataInputStream(is); 
      Employee recovered = new Employee(); 
      recovered.internalize(1, dis); 
     } 
    }; 
    req.setUrl(BASEURL); 
    req.setPost(false); 
    NetworkManager.getInstance().addToQueueAndWait(req); 
} 

從遠程jvm我傳遞ByteArray或ByteArrayInputStream對象,並在CN1我得到EOFException。

這樣可以傳遞對象嗎?或者我應該使用JSON。
我以爲我不需要JSON,如果我雙方都有Java。

回答

1

Codename One的外部化接口與Java SE不兼容。序列化和外部化依賴於反射和動態調用,這對於Codename One的所有目標(甚至是二進制文件通常被混淆的Android)都是不實用的。

您可以傳遞一個對象,但是您需要使用Codename One API來完成此操作。您可以有效地從Codename one項目中獲取JavaSE.jar文件,並使用其中的API編寫/讀取該對象。

除此之外,您讀取對象的代碼不正確。你應該使用Util.readObject/writeObject。我建議閱讀great tutorial Steve Hannah wrote on the subject