2012-07-09 54 views
2

我已经编写了用于从客户端套接字发送/接收数据的代码。发送数据步骤已成功完成,但是当我想从套接字读取数据时,readLine()方法在没有要读取数据的情况下阻止程序。从Java客户端套接字读取数据

这是我的代码:

StringBuffer document = new StringBuffer(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
String line = null; 
while ((line = reader.readLine()) != null) 
    document.append(line + "\n"); 
reader.close() 

感谢所有 可以阅读所有接收到的数据,但的readLine或读取(字节[],INT,INT)方法阻止程序时没有数据读取,而此时这个方法必须返回null/-1。

+0

您正在交换基于字符的行格式的数据吗? 当没有足够的数据可用于构建下一行时,您期望readLine()如何处理(如果不阻止)? – 2012-07-09 07:45:22

+0

我尝试读取(byte [],int,int)来读取字节,但它再次被阻塞。对我来说这很奇怪,为什么read()会在没有数据时阻塞。 – RedFlow 2012-07-09 07:59:42

回答

5

这是因为readLine()函数是一个阻塞调用,所以它当然会阻塞。

为了更有建设性,调用像readLine()这样的方法应该在一个单独的线程中,以便阻塞调用不会影响其余代码。从正在阅读的课程中,我会建议创建一个纯粹用于控制从套接字读取的线程。

我会传递创建类的引用,以便如果线程收到信息,父类可以使用它。

0

BufferedReader有一个名为'ready()'的方法,当数据准备好被接收时它返回true。如果您不希望在'readLine()'调用时被阻止,请首先检查是否已准备好读取数据。

Have a look at the documentation

相关问题