[英]Read data from a client socket in Java
我已经编写了用于从客户端套接字发送/接收数据的代码。 发送数据步骤已成功完成,但是当我想从套接字读取数据时, 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。
那是因为readLine()
函数是一个阻塞调用,所以它当然会阻塞。
为了更具建设性,对readLine()
类的方法的调用应位于单独的线程中,以使阻塞调用不会影响代码的其余部分。 从正在读取的类中,我建议创建一个纯粹用于控制从套接字读取的线程。
我将传递对创建类的引用,以便如果线程接收信息,则父类可以使用它。
BufferedReader有一个名为“ ready()”的方法,当准备好接收数据时该方法返回true。 如果不想在“ readLine()”调用中被阻止,请首先检查是否准备好读取数据。
看一下文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.