将序列化的Externalizable对象从标准JVM传递到CodenameOne

时间:2013-12-14 15:35:16

标签: 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 如果我双方都有Java,我以为我不需要JSON。

1 个答案:

答案 0 :(得分:1)

Codename One的外化接口与Java SE不兼容。序列化和外部化依赖于反射和动态调用,这在所有Codename One的目标上都是不实用的(即使是通常对二进制文件进行模糊处理的Android)。

您可以传递一个对象,但是您需要使用Codename One API来执行此操作。您可以从Codename项目中有效地获取JavaSE.jar文件,并使用其中的API来编写/读取对象。

除此之外,您读取对象的代码不正确。您应该使用Util.readObject / writeObject。我建议阅读great tutorial Steve Hannah wrote on the subject