Я пишу часть программного обеспечения, которая соединяет внешний источник (который я почти не контролирую) с локальной базой данных в Java через HTTP 1.0. Я пытаюсь вернуть информацию из базы данных в теле ответа до закрытия соединения (внешний источник имеет очень мягкий график тайм-аута). Я использую 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;
}