从套接字读取时,Java BufferedReader转换循环挂起

时间:2012-02-03 20:05:38

标签: java http parsing sockets bufferedreader

我正在编写一个软件,它通过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;
}

0 个答案:

没有答案