2013-12-14 28 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