Java 解决Bufferedreader阻塞问题

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

我有一个读取方法,可以从套接字连接读取Inputstream:

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
我做错了什么


编辑:关闭套接字连接不是一个选项

您所说的“解决此问题”是什么意思?阻塞本身并不是一个问题。为什么要避免这种情况?因为客户端必须侦听输入而不会导致超时。这是此任务的要求。仍不清楚您要修复什么。当您希望作业继续尝试时,是超时时间变短而作业中止,还是太长而在等待输入时不让其他代码运行,或者是完全其他原因。如果您可以描述整个系统,以及它现在的行为与您希望它的行为,这可能会有所帮助。