我从Socket.getInputStream()
创建的流中读取。当我使用它时,它会阻塞,直到它获得新数据(确切地说它应该是什么)。现在我需要流来读取内容(见下文)。但是当我开始新的读取时,它会给我未指定的输出(或不是?)。我的问题是:
如何中断实际读取,所以我可以使用read方法?
详细信息:我连接到服务器并向其发送命令。服务器有时会向我的客户端发送消息(事件通知),我需要注册。我希望能够在等待此消息时发送命令。当我发送命令时,从流中读取该命令的答案。这就是问题所在:我在尝试阅读答案时仍在听取这些信息。所以我需要一些能够中断当前读取的东西。
答案 0 :(得分:1)
停止事件处理器读取的问题是您引入了竞争条件:如果服务器在您终止读取后立即发送事件会发生什么? "响应"你读过的东西最终会成为一件大事。
执行此操作的正确方法是在一个位置执行所有阅读,包括事件和响应,并像处理事件一样处理响应。在发送命令之前,为响应注册一个侦听器,然后发送命令。当读取线程看到响应时,让它找到正确的监听器并通知它已收到响应。
答案 1 :(得分:0)
处理此IMO的最简单,最好的方法是使用具有事件回调的异步侦听器。 DataFetcher is an implementation(另请参阅Timeout和PartialReadException,同一项目/包中的依赖项,以及IOUtils,它们可以直接将FetcherListener
与{{}}连接起来{1}})