私はJava RMIを使ってプロジェクトを進めています。 これが問題の原因となったクラスです。RMIでのJavaシリアル化
public class FSFile implements Serializable
{
public static final int READ = 0;
public static final int WRITE = 1;
private int flag;
private String filename;
private transient BufferedWriter writer;
private transient BufferedReader reader;
...
private void writeObject(ObjectOutputStream stream) throws IOException
{
stream.defaultWriteObject();
stream.writeObject(writer);
stream.writeObject(reader);
}
private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException
{
stream.defaultReadObject();
writer = (BufferedWriter) stream.readObject();
reader = (BufferedReader) stream.readObject();
}
}
基本的に、私は(今のところ)ローカルで他のプロセスにそのFSFileオブジェクトを送信するためにRMIを使用して、ここで私が手にエラーがあります:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException;
java.io.BufferedReader
以上であるために正確には、FileServiceという名前のクラスがあり、FileServerから関数fetch()を使用してFSFileを取得します。 fetch()関数に特別なものは何もなく、FSFileを作成して返します。これらのクラス間のすべての通信は、RMIを介して行われます。
どうして私のようなエラーがありますか?
私のカスタムクラスではなくファイルを送信するように提案していますか? 私がしたかったのは一方の端からです。ちょうどそのFSFileが読み書きを呼び出すだけで、他方の端でローカルに実行されます。私がwriteObjectとreadObjectを使いたいのは、その状態を維持することだけです。 – David
実際、リモートユーザーはクラスFileを使用して読み書きすることはできません。 – David
いいえ私はファイルを送ることを提案していません。それはちょうど名前です。私はコンテンツを送ることを話している。別の話であるI/O機能を備えた何らかのリモートファイルを実装したい場合は、独自のRemoteOutputStreamなどを実装する必要があります。不可能ではなく、システムIMOを設計する素晴らしい方法ではありません。 – EJP