Как мне реализовать класс Marshalling в Java? - PullRequest
1 голос
/ 17 марта 2012

Мне нужно реализовать класс Marshalling на Java.По сути, я понимаю, что Marshalling используется для форматирования данных, чтобы их можно было отправлять через сеть сокетов, а затем демаршировать их на стороне сервера.Поправьте меня, если я ошибаюсь, спасибо.

Тогда это 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 не будет правильно сериализовать удаленные ссылки.Мой лектор упоминает, что вместо этого мне нужно передать заглушку, содержащую удаленную ссылку на объект.Удаленный объект в этом случае будет сервером.Настоящая проверка того, что вы передаете удаленные объекты по ссылке, а не по копии, заключается в том, что программе необходимо иметь возможность передавать серверы и при этом обращаться к одному и тому же объекту.Я совершенно размыта, кто-нибудь может мне объяснить и подсказать, как это сделать?

Ответы [ 2 ]

1 голос
/ 17 марта 2012

Вполне возможно, ваш лектор хочет, чтобы вы нашли и использовали маршаллированных объектов . Они являются частью API RMI и позволяют сериализовать объекты, сохраняя удаленные ссылки, содержащиеся в них.

С маршализованным объектом ваш код будет выглядеть примерно так:

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 для получения дополнительной информации.

0 голосов
/ 18 марта 2012

Ваш лектор ошибается. Экспортированный удаленный объект автоматически назначается RMI как его заглушка. От вас здесь ничего не требуется.

...