相关疑难解决方法(0)

Java InputStream阻塞读取

根据java api,InputStream.read()描述为:

如果由于到达流末尾而没有可用字节,则返回值-1.此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常.

我有一个while(true)循环执行读取,当通过流发送任何内容时,我总是得到-1.这是预期的.

我的问题是什么时候会读取()阻止?因为如果它没有获得任何数据,则返回-1.我希望阻塞读取等到收到数据.如果你已经到达输入流的末尾,不应该读取()只是等待数据而不是返回-1?

或者read()只阻止是否有另一个线程访问流并且你的read()无法访问流?


这引出了我的下一个问题.我曾经有过事件监听器(由我的库提供),当数据可用时会通知我.当我收到通知时,我会调用while((aByte = read()) > -1)存储字节.当我在非常接近的时间内收到两个事件并且我的所有数据都没有被显示时,我感到很困惑.似乎只显示第二个事件数据的尾端,其余部分丢失了.

我最终改变了我的代码,以便当我得到一个事件时,我会调用if(inputStream.available() > 0) while((aByte = read()) > -1)存储字节.现在它正常工作,我的所有数据都显示出来了.

有人可以解释这种行为吗?该InputStream.available()是说要回,你可以阻止下一个调用方之前读取的字节数(流?).即使我不使用.available(),我希望第一个事件的读取只是阻止第二个事件的读取,但不会擦除或消耗过多的流数据.为什么这样做会导致我的所有数据都不显示?

java inputstream rxtx blocking java-io

52
推荐指数
4
解决办法
9万
查看次数

标签 统计

blocking ×1

inputstream ×1

java ×1

java-io ×1

rxtx ×1