【问题标题】:How do I implement a Marshalling class in Java?如何在 Java 中实现编组类?
【发布时间】:2012-03-17 06:19:10
【问题描述】:

我需要在 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 序列化不会正确序列化远程引用。我的讲师提到我需要传递一个包含对对象的远程引用的存根。在这种情况下,远程对象将是服务器。您通过引用而不是通过副本传递远程对象的真正测试是程序需要能够传递服务器并且仍然引用同一个对象。我对它很模糊,任何人都可以向我解释并指导我怎么做?

【问题讨论】:

    标签: java marshalling rmi


    【解决方案1】:

    您的讲师很可能希望您找到并使用编组的对象。它们是 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

    【讨论】:

      【解决方案2】:

      你的讲师弄错了。导出的远程对象由 RMI 自动编组为它的存根。您无需在这里做任何事情。

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 1970-01-01
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多