Java 解决Bufferedreader阻塞问题
我有一个读取方法,可以从套接字连接读取Inputstream:Java 解决Bufferedreader阻塞问题,java,sockets,bufferedreader,Java,Sockets,Bufferedreader,我有一个读取方法,可以从套接字连接读取Inputstream: private String read(Socket socket) throws IOException { InputStreamReader isr = new InputStreamReader(socket.getInputStream(), "UTF-8"); BufferedReader br = new BufferedReader(isr); char[] bu
private String read(Socket socket) throws IOException {
InputStreamReader isr = new InputStreamReader(socket.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(isr);
char[] buf = new char[BUF_SIZE];
int n = br.read(buf, 0, BUF_SIZE); // blocking
String msg = new String(buf, 0, n);
return msg;
}
现在Bufferedreader的读取方法是阻塞。我必须解决这个问题。我能做什么
我试过:
while(br.ready()) {
char[] buf = new char[BUF_SIZE];
int n = br.read(buf, 0, BUF_SIZE); // blocking
msg = new String(buf, 0, n);
}
但这给了我以下错误:
java.net.SocketException: Software caused connection abort: recv failed
我做错了什么
编辑:关闭套接字连接不是一个选项您所说的“解决此问题”是什么意思?阻塞本身并不是一个问题。为什么要避免这种情况?因为客户端必须侦听输入而不会导致超时。这是此任务的要求。仍不清楚您要修复什么。当您希望作业继续尝试时,是超时时间变短而作业中止,还是太长而在等待输入时不让其他代码运行,或者是完全其他原因。如果您可以描述整个系统,以及它现在的行为与您希望它的行为,这可能会有所帮助。