Java BufferedReader ReadLine冻结了程序

Java BufferedReader ReadLine冻结了程序,java,bufferedreader,Java,Bufferedreader,我的代码如下 当我使用BufferedReadLine()时,整个程序被冻结。问题是readLine在到达行尾之前不会返回该行。因为服务器不会发送新行字符值,所以它不会关闭 那我怎么才能克服呢?请编辑我的代码 while (ok) { BufferedReader re = new BufferedReader(new InputStreamReader(socket.getInputStream()));

我的代码如下

当我使用BufferedReadLine()时,整个程序被冻结。问题是readLine在到达行尾之前不会返回该行。因为服务器不会发送新行字符值,所以它不会关闭

那我怎么才能克服呢?请编辑我的代码

                  while (ok) {
                        BufferedReader re = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                        aString = re.readLine();
                        ...
                    }
注意:我希望以编程的方式执行此操作,而不是去终止运行它的进程

UPDATE

StringBuilder re= new StringBuilder();
                    while ((c = r.read()) >= 0) {
                            re.append( (char)c ) ;  
                    }
                    String result = re.toString();
                    byte[] contentInBytes = result.getBytes();
                    out.write(contentInBytes);
                    out.flush();
                    out.close();
不要使用的readLine()方法。使用read()方法,该方法将读取单个字符。您必须将它们从整数转换为字符,但这将使您不必读取换行符

编辑:添加 假设“re”是缓冲套接字输入流读取器

while ((i = re.read()) != -1)
{
   if (i > 0)
   {
      char c = (char) i;
      // Do something with the character
   }
}
结束编辑

此外,如果您担心服务器没有响应,则可能需要在以下服务器上设置超时:

不要使用的readLine()方法。使用read()方法,该方法将读取单个字符。您必须将它们从整数转换为字符,但这将使您不必读取换行符

编辑:添加 假设“re”是缓冲套接字输入流读取器

while ((i = re.read()) != -1)
{
   if (i > 0)
   {
      char c = (char) i;
      // Do something with the character
   }
}
结束编辑

此外,如果您担心服务器没有响应,则可能需要在以下服务器上设置超时:


你想读多少?单字节?N字节?直到超时?长度前缀消息?您实际要做什么。你在这里期望的行为是什么。你能提供更多的细节吗?我正在下载一个文件。我一次接收10个字节。我已经更新了上面的最新代码,你想读多少?单字节?N字节?直到超时?长度前缀消息?您实际要做什么。你在这里期望的行为是什么。你能提供更多的细节吗?我正在下载一个文件。我一次接收10个字节。我已经更新了上面的最新代码1。)是的,我就是这么做的
re
在我的一个是
BufferedReader
。这是正确的吗?2.)当我执行套接字时,设置otimeout(500);我收到一个异常。ava.net.SocketTimeoutException:读取超时1。是的,
re
应该是
套接字上的
BufferedReader
。2.根据我发布的Socket链接上的javadocs,如果你有一个
SocketTimeoutException
,那么当你调用“read”时,这个Socket看起来在500毫秒内没有什么可读的。我已经更新了我的代码,并将Socket超时时间更新为5000。但是文本仍然没有保存到文件中。任何线索。帮助?你知道while循环是否退出了吗?我已经添加了sysout消息,在while循环中,它不会被执行。所以程序在re.read()上卡住了。)是的,我就是这么做的
re
在我的一个是
BufferedReader
。这是正确的吗?2.)当我执行套接字时,设置otimeout(500);我收到一个异常。ava.net.SocketTimeoutException:读取超时1。是的,
re
应该是
套接字上的
BufferedReader
。2.根据我发布的Socket链接上的javadocs,如果你有一个
SocketTimeoutException
,那么当你调用“read”时,这个Socket看起来在500毫秒内没有什么可读的。我已经更新了我的代码,并将Socket超时时间更新为5000。但是文本仍然没有保存到文件中。任何线索。帮助?你知道while循环是否退出了吗?我已经添加了sysout消息,在while循环中,它不会被执行。所以程序在re.read()时卡住了