Read an InputStream using the Java Server Socket | Baeldung
Before: 헤더 읽기 전
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
String line;
System.out.println("start");
while(!(line = bufferedReader.readLine()).isEmpty()) {
System.out.println(line);
}
System.out.println("end");
After: 헤더 읽기 로직 추가
// 요청
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
String line, requestBody = "", requestLine = bufferedReader.readLine();
// 0 METHOD, 1 URL, 2 HTTP VERSION
String[] request = requestLine.split(" ");
HashMap<String, String> header = new HashMap<>();
while(!(line = bufferedReader.readLine()).isEmpty()) {
HttpRequestUtils.Pair pair = HttpRequestUtils.parseHeader(line);
header.put(pair.getKey(), pair.getValue());
System.out.println(line);
}
// .. 다른 코드들
if(request[0].equals("GET") && request[1].contains("?")) {
requestBody = request[1].split("\\?")[1];
}
if(request[1].contains("/user/create") && (request[0].equals("GET"))) {
RequestCreate.create(HttpRequestUtils.parseQueryString(requestBody));
response200Header(dos, 0);
return;
}
InputStreamReader는 바이트 스트림을 문자 스트림으로 변환하는 브릿지 역할을 합니다.
바이트 입력 스트림을 문자 입력 스트림으로 변환: InputStreamReader는 InputStream(예: FileInputStream, System.in 등)으로부터 바이트 데이터를 읽고, 이를 문자 데이터로 변환합니다.
문자 인코딩 처리: 생성자에서 인코딩을 지정할 수 있습니다. 지정하지 않으면 기본 시스템 인코딩을 사용합니다.
BufferedReader는 문자 입력 스트림을 버퍼링하여 효율적으로 읽을 수 있게 해줍니다.
버퍼링: 내부 버퍼를 사용하여 문자, 배열, 라인 등을 효율적으로 읽을 수 있습니다. 버퍼링을 통해 I/O 성능을 향상시킵니다.
readLine() 메서드: 한 줄 단위로 데이터를 읽을 수 있는 편리한 메서드를 제공합니다.