BufferedWriter, OutputStreamWriter, getOutputStream

  • 이 포스팅은 카카오 로그인을 구현하던중 작성하였던
BufferedWriter bw=
    new BufferedWriter(new OutputStreamWriter(con.getOutputStream(),"UTF-8"));

이 코드가 제대로 이해가 되지 않아서 하나하나 뜯어보면서 클래스를 이해해 보고자 한다.

getOutputStream

  • 먼저 가장 내부에 위치한 getOutputStream이다.
  • 클라이언트의 connect요청이 서버에서 accept됐다면 양쪽의 객체로부터 각각 입력스트림(inputStream)과 출력스트림(outputStream)을 얻을 수 있다.
  • 즉 getOutputStream은 출력스트림을 얻는다는 의미이다.
  • 그래서 보통 getOutputStream이 만들어졌다면 write() 메소드를 통해 메시지를 전송할 수 있다.
  • 그러나 UTF-8로 따로 변환작업이 이뤄지지 않았다면 한글이 깨질 수 있기 때문에 UTF-8로 인코딩 하는 추가 작업이 필요하다.

OutputStreamWriter

  • OutputStreamWriter는 바이트 출력 스트림에 연결되어 문자 출력 스트림인 Wrtier로 변환시키는 보조 스트림이다.
  • getOutputStream을 UTF-8로 인코딩 해주기 위해 사용함

BufferedWriter

  • BufferedWriter는 문자 출력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림이다.

  • 프로그램에서 전송한 데이터를 내부 버퍼에 쌓아두었다가 버퍼가 꽉 차면 버퍼의 모든 데이터를 한꺼번에 보냄

  • 하나하나 보내는게 아니라 메모리 버퍼를 통해 데이터를 고속 전송하기 때문에 실행 성능이 향상됨

  • 다른 outputstream과 동일하게 Write()를 통해 데이터를 전송하지만 buffer에 잔여데이터가 있을 수 있으니 항상 flush를 해주어야 함

+ Recent posts