我需要在Java中实现编组类。基本上,我知道编组用于格式化数据,以便可以通过套接字网络发送数据,然后在服务器端将其拆组。纠正我,如果我错了,谢谢。
然后这2种方法完成。
public void marshallObject (Object obj, ObjectOutputStream stream);
public Object unmarshallObject (ObjectInputStream stream);
public void marshallObject(Object obj, ObjectOutputStream stream) {
try {
stream.writeObject(obj);
stream.close();
} catch (IOException e) {
System.out.println("Exception:" + e);
}
}
public Object unmarshallObject(ObjectInputStream stream) {
Object object = null;
try {
object = stream.readObject();
} catch (Exception e) {
System.out.println("Exception:" + e); }
return obj;
}
我正在使用Java对象序列化机制。但是,以这种简单的方法使用它们将不起作用,因为Java序列化将无法正确地序列化远程引用。我的讲师提到我需要传递一个存根,该存根包含对该对象的远程引用。在这种情况下,远程对象将是服务器。通过引用而不是通过副本传递远程对象的真实测试是,程序需要能够传递服务器,并且仍要引用同一对象。我对此很模糊,任何人都可以向我解释并指导我该怎么做?
最佳答案
您的讲师很有可能希望您找到并使用编组的对象。它们是RMI API的一部分,允许您序列化对象,同时保留其中包含的远程引用。
使用编组的对象,您的代码将更像这样:
public void marshallObject(Object obj, ObjectOutputStream stream) {
try {
stream.writeObject(new MarshalledObject<Object>(obj));
stream.close();
} catch (IOException e) {
System.out.println("Exception:" + e);
}
}
public Object unmarshallObject(ObjectInputStream stream) {
MarshalledObject<Object> object = null;
try {
object = stream.readObject();
} catch (Exception e) {
System.out.println("Exception:" + e);
}
return (object != null) ? object.get() : null;
}
有关更多信息,请参考Javadoc。