如何将文本HTTP响应完全按原样读入字符串?

时间:2013-03-14 10:26:06

标签: java bufferedreader readline eof carriage-return

以下代码使用BufferedReader从HTTP响应流中读取:

final StringBuilder responseBuilder = new StringBuilder();
String line = bufferedReader.readLine();
while (line != null) {
    responseBuilder.append(line);
    responseBuilder.append('\n');
    line = bufferedReader.readLine();
}
response = responseBuilder.toString();

但是将'\n'附加到每一行似乎有点瑕疵。我想完全按原样返回HTTP响应,那么如果它在最后一行之后没有返回字符呢?无论如何都会使用上面的代码添加一个 - 有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

  

我想完全按原样返回HTTP响应

不要使用readLine() - 就这么简单。我建议改为使用StringWriter

StringWriter writer = new StringWriter();
char[] buffer = new char[8192];
int charsRead;
while ((charsRead = bufferedReader.read(buffer)) > 0) {
    writer.write(buffer, 0, charsRead);
}
response = writer.toString();

请注意,如果编码错误,即使这样也行不通。要保留完全 HTTP响应,您需要将其作为二进制流读取(并写入)。