2012-03-17 5 views
1

Java에서 Marshalling 클래스를 구현해야합니다. 기본적으로 Marshalling은 데이터를 형식화하여 소켓 네트워크를 통해 전송 한 다음 서버 측에서 언 마샬링 할 수 있다는 점을 잘 알고 있습니다. 내가 틀린 고마운 경우에 나를 정정하십시오.Java에서 마샬링 클래스를 구현하려면 어떻게해야합니까?

다음 두 가지 방법을 완료하십시오.

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 Object Serialization 메커니즘을 사용하고 있습니다. 그러나 Java 직렬화가 원격 참조를 올바르게 직렬화하지 않으므로 이러한 단순한 방법으로는 사용할 수 없습니다. 내 강사 언급 대신 원격 참조를 포함하는 스텁 개체에 전달해야합니다. 이 경우 원격 객체는 서버가됩니다. 복사가 아닌 참조로 원격 객체를 전달한다는 사실 테스트는 프로그램이 서버를 통과하면서도 여전히 동일한 객체를 참조 할 수 있어야한다는 것입니다. 나는 그것으로 아주 흐릿해진다, 누군가는 저에게 설명하고 나에게 어떻게하는지 안내 할 수 있는가?

답변

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 참조 : 코드를 더욱 같을 것이다 정렬 화 된 객체와

.

0

강사를 오인 한 것입니다. export 된 리모트 오브젝트는 RMI에 의해 그 그루터기로서 자동적으로 정렬 화됩니다. 여기서해야 할 일은 없습니다.

관련 문제