Java 当通过BufferedReader读取文件时,循环不退出

Java 当通过BufferedReader读取文件时,循环不退出,java,file-io,java-io,Java,File Io,Java Io,在我的应用程序中,我有客户机和服务器程序,只要服务器从客户机获得连接,服务器就会将MySQL表中的所有可用id发送到客户机,为此,我使用while循环读取文件的内容 我尝试了以下代码: while((a=in.read())!=-1) 但我的问题是,当文件中没有可读取的内容时,while循环并没有退出,它本身就停止了。如何退出while循环?您不应该使用while循环,而应该使用线程,线程将等待来自套接字的输入,当数据可用时,它将读取数据,然后发送/处理在流中找到的输入。在.read()中使用

在我的应用程序中,我有客户机和服务器程序,只要服务器从客户机获得连接,服务器就会将MySQL表中的所有可用id发送到客户机,为此,我使用while循环读取文件的内容

我尝试了以下代码:

while((a=in.read())!=-1)

但我的问题是,当文件中没有可读取的内容时,while循环并没有退出,它本身就停止了。如何退出while循环?

您不应该使用
while
循环,而应该使用线程,线程将等待来自套接字的输入,当数据可用时,它将读取数据,然后发送/处理在流中找到的输入。在.read()中使用while和waiting(阻塞)主线程不是一个好主意。

。请参阅API文档

此方法将一直阻止,直到输入数据可用为止,即 检测到流,或引发异常


您可以在.read()中执行
in.available()
以检查是否有任何字节可读取,然后再执行in.read()。

in.read()
是一个阻塞调用,它将停止并等待一些输入
in
是一个从文件读取的inputstreamreader感谢您的回复,in是BufferedReader in=new BufferedReader(new inputstreamreader(socket.getInputStream());为什么不使用
BufferedReader
,然后可以检查
null
。感谢您的回复,如果是inputstreamreader中的,则是。感谢您的回复,我已经使用了.ready()我最近提出的问题是调试一个套接字,而不是in.available使其对我有效。在该应用程序中,我遇到了一些问题,你能帮我解决这个问题吗。