2017-01-12 14 views
-4
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循环退出。当我使用inputstream阅读器时,我不能从while循环退出后,从缓冲阅读器读取数据

+0

您的代码按设计工作。它将在流结束时退出该循环。不清楚你的期望,或问。 – EJP

+0

虽然我试图从缓冲读取器中读取数据,但是我得到了data.But,但如果number等于null,我无法从while循环中退出。我收到这样的消息“D/jdwp:processIncoming D/jdwp:handlePacket:cmd = 0x6,cmdSet = 0x1,len = 0xB,id = 0x2873C,flags = 0x0,dataLen = 0x0 – jibin

+0

您*将退出'number'为空时的while循环。没有两种方式。可能你预计它会在错误的情况下神奇地变为空? – EJP

回答

1

readLine()在流上,而不是在流之前返回null,并且流的结束仅在对等关闭连接时发生。你的期望看起来是错位的。

+0

任何其他方式没有关闭连接 – jibin

+0

任何其他方式做什么?定义你的要求。 – EJP

+0

退出while循环而不关闭对等连接 – jibin

-1

这是因为你无法理解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. 
    } 
} 

希望这会有所帮助。

+0

他的问题是,他想停止阅读一些其他(未说明的)条件而不是流结束。这段代码没有解决它。 – EJP

+0

听起来很清楚,如果是这样的话,没有其他方法可以结束循环。 –