为什么readBoolean阻塞而readObject却没有呢?

时间:2012-07-28 22:50:56

标签: java stream

我的客户端有以下方法:

  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);
    }

如果我使用readBooleanwriteBoolean,则客户端阻止readBoolean方法,但如果我使用readObjectwriteObject,我的应用程序可以正常工作精细。有readBoolean方法阻止的原因吗?

1 个答案:

答案 0 :(得分: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存储为writeBoolean,反之亦然readBoolean存储在writeObject时。

也许你只需要刷新输出流。