2012-03-17 6 views
1

JavaでMarshallingクラスを実装する必要があります。基本的に私は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 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

あなたの講師は間違っています。エクスポートされたリモートオブジェクトは、スタブとしてRMIによって自動的にマーシャリングされます。ここで何もする必要はありません。

関連する問題