Ответ 1
Если вы хотите прочитать HTTP-запрос POST, я настоятельно рекомендую использовать BufferedInputStream.read()
(not BufferedReader
!) напрямую (без readLine
-образных промежуточных абстракций), обращая внимание на все детали вручную, включая обработку CR и LF в соответствии с HTTP RFC.
Вот мой ответ на ваш более конкретный вопрос (как реализовать именно это readLine
). Это может быть не самое быстрое решение, но сложность времени является оптимальной, и она работает:
import java.io.BufferedReader;
import java.io.IOException;
public class LineReader {
private int i = -2;
private BufferedReader br;
public OriginalLineReader(BufferedReader br) { this.br = br; }
public String readLine() throws IOException {
if (i == -2) i = br.read();
if (i < 0) return null;
StringBuilder sb = new StringBuilder();
sb.append((char)i);
if (i != '\r' && i != '\n') {
while (0 <= (i = br.read()) && i != '\r' && i != '\n') {
sb.append((char)i);
}
if (i < 0) return sb.toString();
sb.append((char)i);
}
if (i == '\r') {
i = br.read();
if (i != '\n') return sb.toString();
sb.append((char)'\n');
}
i = -2;
return sb.toString();
}
}
Вы не найдете такой readLine
, встроенный в Java. Вероятно, вы найдете аналогичный, но не совсем соответствующий readLine
в стороннем файле .jar
. Моя рекомендация - просто использовать вышеприведенную, если вам действительно нужна эта функция.