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는 바이트 스트림을 문자 스트림으로 변환하는 브릿지 역할을 합니다.

주요 특징:

바이트 입력 스트림을 문자 입력 스트림으로 변환: InputStreamReader는 InputStream(예: FileInputStream, System.in 등)으로부터 바이트 데이터를 읽고, 이를 문자 데이터로 변환합니다.

문자 인코딩 처리: 생성자에서 인코딩을 지정할 수 있습니다. 지정하지 않으면 기본 시스템 인코딩을 사용합니다.

BufferedReader

BufferedReader는 문자 입력 스트림을 버퍼링하여 효율적으로 읽을 수 있게 해줍니다.

주요 특징:

버퍼링: 내부 버퍼를 사용하여 문자, 배열, 라인 등을 효율적으로 읽을 수 있습니다. 버퍼링을 통해 I/O 성능을 향상시킵니다.

readLine() 메서드: 한 줄 단위로 데이터를 읽을 수 있는 편리한 메서드를 제공합니다.

HTTP Request Header 정보