【问题标题】:when i used inputstream reader i can't exit from the while loop after reading the data from the buffered reader当我使用输入流阅读器时,从缓冲阅读器读取数据后,我无法退出 while 循环
【发布时间】:2017-05-27 10:29:52
【问题描述】:
 Socket socket = serverSocket.accept();
                    InputStream is = socket.getInputStream();
                    InputStreamReader isr = new InputStreamReader(is);
                   BufferedReader br=new BufferedReader(isr);
                    String number;
                    list.clear();
                      while ((number=br.readLine())!=null){
                       list.add(number);

                        }

当我尝试从缓冲读取器中读取数据时,我得到了数据。但如果 number 等于 null,我无法退出 while 循环。

【问题讨论】:

  • 您的代码按设计运行。它将在流结束时退出该循环。不清楚您的期望或要求。
  • 当我试图从缓冲读取器中读取数据时,我得到了数据。但如果数字等于 null,我无法退出 while 循环。我收到这样的消息“D/jdwp:processIncoming D/jdwp:handlePacket:cmd=0x6,cmdSet=0x1,len=0xB,id=0x2873C,flags=0x0,dataLen=0x0”
  • number 为空时,您退出 while 循环。没有两种方法。可能您期望它在错误的情况下神奇地变为 null?
  • 我收到这样的消息“D/jdwp: processIncoming D/jdwp: handlePacket: cmd=0x6, cmdSet=0x1, len=0xB, id=0x2873C, flags=0x0, dataLen=0x0 "

标签: java android sockets bufferedreader


【解决方案1】:

readLine() 在流而不是之前返回 null,并且只有在对等方关闭连接时才会在套接字上结束流。您的期望似乎是错误的。

【讨论】:

  • 任何其他方式而不关闭连接
  • 还有其他方法可以做什么?定义您的要求。
  • 退出while循环而不关闭对等连接
  • 因此,您所要做的就是定义要退出while 循环的条件,并且您已经回答了自己的问题。没有其他人可以为您做到这一点。
【解决方案2】:

这是因为您未能理解 readline 函数及其实现。您正在从缓冲区读取数据并将数据与 null 进行比较,这显然不是您想要的。这就是我喜欢从 TCP 套接字读取数据的方式。

while(statement == true){
    int count = bufferedInputStream.read(buffer);
    if (count == -1){
        // Socket has been closed
    } else {
        // Data has been read.
        // Do comparison here.
    }
}

希望这会有所帮助。

【讨论】:

  • 他的问题是他想在流结束之外的其他(未说明的)条件下停止阅读。这段代码没有解决。
  • 对我来说听起来很清楚.. 如果是这种情况,没有其他方法可以结束循环。
猜你喜欢
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
相关资源
最近更新 更多