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