我正在编写一个软件,它通过HTTP 1.0将外部源(我几乎无法控制)连接到Java中的本地数据库。我试图在连接关闭之前从响应正文中的数据库返回信息(外部源具有非常宽松的超时计划)。我正在使用BufferedReader
来读取来自套接字的流,但是大部分正文(我们控制的唯一部分)在被读取之前被切断了。一个解决方法是向主体添加两个新行(\n
)以强制通过数据,但我觉得这可能会解决更大的问题。
当套接字停止写入缓冲区时,是否有BufferedReader
的替代信号,或者我是否误用了BufferedReader
?一些代码:
接受来自服务器的连接:
HttpHandler(ServerSocket serverSocket, Executor service) throws UnsupportedEncodingException, IOException
{
this.service = service;
Socket connectionSocket = serverSocket.accept();
InetAddress client = connectionSocket.getInetAddress();
input = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream(), "UTF-8"));
output = new BufferedWriter(new OutputStreamWriter(connectionSocket.getOutputStream(), "UTF-8"));
}
将缓冲区处理成字符串:
@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;
}