0

クライアントに次のメソッドがあります。

  public boolean save() {
    this.ostream.writeObject(Command.SAVE); // write to socket
    return this.istream.readBoolean();
  }

私のサーバーでは:

    Object o = this.istream.readObject();
    if (o == Command.SAVE) {
      boolean isSaved = save(); // save to database
      this.ostream.writeBoolean(isSaved);
    }

andを使用するreadBooleanwriteBooleanreadBooleanクライアントのメソッドがブロックされますが、代わりにreadObjectandを使用すると、アプリケーションは正常に動作します。メソッドがブロックさwriteObjectれる理由はありますか?readBoolean

4

1 に答える 1

0

コメントに似ていますが、コード例は読みにくいので、回答として投稿しました...誰も気にしないことを願っています

あなたはそれについて確信がありますか?このコードでテストしました

ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("d:/objects.obj"));
System.out.println("writeObject(true)");
out.writeObject(true);
System.out.println("writeBoolean(true)");
out.writeBoolean(true);
System.out.println("writeBoolean(true)");
out.writeBoolean(true);
out.close();//or flush
System.out.println("------------------");

ObjectInputStream in=new ObjectInputStream(new FileInputStream("d:/objects.obj"));
System.out.println("readObject="+in.readObject());
System.out.println("readBoolean="+in.readBoolean());
System.out.println("readObject="+in.readObject());//<- readObject stored by writeBoolean

そしてそれはうまくいくようです。私が抱えていた唯一の問題は、 で保存しようとしたとき、またはでreadObject保存しようとしたときでした。writeBooleanreadBooleanwriteObject

たぶん、出力ストリームをフラッシュする必要があるだけです。

于 2012-07-28T23:18:29.877 に答える