InputStream.available()不起作用

时间:2011-02-02 15:31:09

标签: java inputstream

我正在尝试使用inputstream.available()检查是否有任何数据要读取而不阻塞线程。但它永远不会返回任何价值>我是不是错了?

while (slept < logOnTimeOut) {
    if ( sslSocket.getInputStream().available() > 0 )  {
        if (input.readLine().equals("OK") ) {    // todo: set timeout here
            System.out.println("Successfully Logged On");
            isLoggedOn = true;
            return true;
        }
    } else {
        Thread.sleep(500);
        slept += 500;
    }
}

1 个答案:

答案 0 :(得分:5)

阅读javadoc

  

返回此输入流可以读取(或跳过)的字节数的估计值,而不会在下次调用此输入流的方法时阻塞。下一次调用可能是同一个线程或另一个线程。单个读取或跳过这么多字节不会阻塞,但可以读取或跳过更少的字节。

     

请注意,虽然InputStream的某些实现将返回流中的总字节数,但许多实现不会。使用此方法的返回值来分配用于保存此流中所有数据的缓冲区是绝对正确的。

简而言之,InputStream.available()并不像你想象的那么有用。

如果您需要检测流的末尾read(),它会检测结果是否为-1。请勿使用available()