BufferedReader inputstream 阻塞直到它接收到第一个输入
BufferedReader inputstream blocks only until it receives the first input
我正在使用套接字实现即时消息传递。
我在客户端有以下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 phone 我正在测试过热。
how can I get readline() to block until more input arrives?
它确实阻塞直到更多输入到达。你的问题是你在两个嵌套循环中调用它,其中一个忽略了流的结尾
删除外部 while (true)
循环。您已经在方法内部循环直到流结束。如果您也循环调用该方法,您将在流的末尾永远旋转。
从代码中删除 while(true) 循环
我正在使用套接字实现即时消息传递。
我在客户端有以下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 phone 我正在测试过热。
how can I get readline() to block until more input arrives?
它确实阻塞直到更多输入到达。你的问题是你在两个嵌套循环中调用它,其中一个忽略了流的结尾
删除外部 while (true)
循环。您已经在方法内部循环直到流结束。如果您也循环调用该方法,您将在流的末尾永远旋转。
从代码中删除 while(true) 循环