BufferedReader输入流仅在收到第一个输入之前阻塞

时间:2015-02-14 00:31:46

标签: java android sockets

我正在使用套接字来实现即时消息。

我在客户端有以下Java代码:

while ( true )
    checkInputStream();

这里的功能是:

private void checkInputStream() throws IOException
{   
    //prints once, but after the first input arrives, it prints infinitely
    Log.i( "MY_TAG", "CHECKING INPUT STREAM");
    String inputLine;

    //inputStream is a BufferedReader object
    while ((inputLine = inputStream.readLine()) != null) 
    {
                //code                                                                                       
    }   
}

问题

我得到的行为是readline()阻塞,直到它收到第一个输入(这太棒了)。但是一旦我发送它的第一个消息终止于换行符,它就会一遍又一遍地循环,无论我是否已经看到发送了更多的输入。

问题

这是正常行为吗?

如果是,如何在更多输入到达之前让readline()阻止?

为什么我关心

我希望它能像第一次输入那样保持阻止的原因是因为我能够感觉到Android手机过热测试。

2 个答案:

答案 0 :(得分:1)

  

如何在更多输入到达之前让readline()阻塞?

阻止,直到有更多输入到达。你的问题是你在两个嵌套循环中调用它,其中一个忽略了流的结束

删除外部while (true)循环。您已经循环直到方法内部的流结束。如果你循环调用方法,你将在流的末尾永远旋转。

答案 1 :(得分:-1)

从代码中删除while(true)循环