代码之家  ›  专栏  ›  技术社区  ›  phunehehe

取消从输入流中读取

  •  2
  • phunehehe  · 技术社区  · 15 年前

    目前我正在使用 ObjecInputStream 从A阅读 Socket 使用这个简单的代码,一切都可以正常工作:

    ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
    Object response = input.readObject();
    

    现在,我想以某种方式取消读取,而不关闭流,以便稍后可以再次从中读取。有可能吗?

    编辑 :我想取消读取,因为它阻塞了程序流。我不需要读同样的信息两遍。我只想取消它,这样我就可以发送另一个请求,然后阅读(另一个)响应。

    3 回复  |  直到 7 年前
        1
  •  2
  •   Tom Hawtin - tackline    15 年前

    如果您有某种“主”线程,那么您应该对它执行I/O操作。有一个线程专门用于读取和一些扩展处理输入。如果基于事件,则将结果排队到主线程;如果使用共享状态设计,则修改模型。

        2
  •  2
  •   Asaph    15 年前

    看什么 ObjectInputStream.markSupported() 返回。如果它回来 true 你可以打电话 ObjectInputStream.mark() 在开始时,然后打电话 ObjectInputStream.reset() 倒带 InputStream 回到你标记的地方,这样你以后可以重新使用它。

        3
  •  1
  •   Vincent Ramdhanie    15 年前

    你可以使用 PushBackInputStream 为了完成这一点。在读取了一些字节之后,您就可以读取这些字节了。