从套接字读取时,Java BufferedReader转换循环挂起
我正在编写一个软件,通过HTTP 1.0将外部源(我几乎无法控制)连接到Java中的本地数据库。我试图在连接关闭之前从响应主体中的数据库返回信息(外部源有一个非常宽松的超时时间表)。我正在使用一个从套接字读取时,Java BufferedReader转换循环挂起,java,http,parsing,sockets,bufferedreader,Java,Http,Parsing,Sockets,Bufferedreader,我正在编写一个软件,通过HTTP 1.0将外部源(我几乎无法控制)连接到Java中的本地数据库。我试图在连接关闭之前从响应主体中的数据库返回信息(外部源有一个非常宽松的超时时间表)。我正在使用一个BufferedReader从套接字读取流,但是身体的大部分(我们唯一可以控制的部分)在读取之前就被切断了。解决方法是在正文中添加两行新行(\n)以强制数据通过,但我觉得这可能解决了一个更大的问题 是否有一种替代BufferedReader的方法可以在套接字停止写入其缓冲区时发出信号,或者我是否误用了B
BufferedReader
从套接字读取流,但是身体的大部分(我们唯一可以控制的部分)在读取之前就被切断了。解决方法是在正文中添加两行新行(\n
)以强制数据通过,但我觉得这可能解决了一个更大的问题
是否有一种替代BufferedReader
的方法可以在套接字停止写入其缓冲区时发出信号,或者我是否误用了BufferedReader
?一些代码:
正在接受来自服务器的连接:
并将缓冲区处理为字符串:
@Override
public String[] call() throws Exception
{
String output[] = new String[2];
String line = new String();
StringBuilder builder = new StringBuilder();
while((line = input.readLine()) != null) //hangs here
{
if(line.startsWith("external-"))
{
builder.append(line + "\n");
}
}
buffer = builder.toString();
output = split(buffer);
System.out.println("Process Request Complete");
return output;
}
你记得刷新你的BufferedWriter吗?是的,这发生在我发送输出之后。是否应该更早发生?数据流是否真正面向行(即,它是否由
\n
分隔的行组成?最后一行是否以\n
结尾?是的,它面向行,最后一行是否以\n结尾
@Override
public String[] call() throws Exception
{
String output[] = new String[2];
String line = new String();
StringBuilder builder = new StringBuilder();
while((line = input.readLine()) != null) //hangs here
{
if(line.startsWith("external-"))
{
builder.append(line + "\n");
}
}
buffer = builder.toString();
output = split(buffer);
System.out.println("Process Request Complete");
return output;
}