3

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

这是我的代码:

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 或 read(byte[], int, int) 方法在没有数据要读取时会阻塞程序,而此时此方法必须返回 null/-1。

4

2 回答 2

5

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

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

我会传递一个对创建类的引用,这样如果线程接收到信息,父类就可以使用它。

于 2012-07-09T07:45:19.493 回答
-1

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

看看文档

于 2012-07-09T08:32:09.383 回答