[JAVA] InputStream 데이터 가져오기 (BufferedReader)
Stream?
Stream이란 실제 입력이나 출력이 표현된 데이터의 이상화된 흐름을 말한다.
InputStream, BufferedReader
API 테스트 코드를
응답 데이터를 Stream형태로 가져와서 출력하는 형태로 작성하던 중에
Stream형태로 가져오는 법만 알지 왜 이렇게 가져오는 지 모르고 있었다.
67LINE을 보면
아래 형태의 코드로 Stream 응답 데이터를 가져오고 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
위 코드를 보면 HttpURLConnection을 통해 응답 받은 입력 스트림을 가져오는데,
이걸 InputStreamReader로 감싸고 또 BufferedReader로 감싼다.
BufferedReader를 사용하는 이유는 그냥 InputStream의 데이터를 가져오기엔
InputStream은 1Byte씩 밖에 데이터를 가져오기도 하고
10진수로 변환돼서 가져오기 때문에 따로 문자 형태로 형변환을 해줘야하기 때문이다.
물론 이게 문제가 되는 것은 아닐 수 있지만 만약 응답 데이터의 크기가 클 경우
그만큼 루프를돌려 1Byte씩 형변환을 해줘야 하기 때문에 코드 가독성도 떨어지고 성능 면에서 부담이 클 것이다.
그래서 BufferedReader를 사용하는 것인데,
BufferedReader에는 스트림에 있는 일정량의 데이터를 보관하고 한번에 문자열로 가져올 수 있는
readLine()메소드가 있어 원하는 만큼의 데이터를 가져올 수 있기 때문에 유용하게 사용되고있다.
따라서 BufferedReader는 데이터를 한번에 모아놨다가 한번에 전송되는 버퍼기능을 하기 때문에
성능 면에서도 우수하다.
BufferedReader를 사용하기 위해선 추상클래스 Reader를 인자로 받게 돼있으므로
추상클래스 Reader의 자식 클래스인 InputStreamReader에 InputStream을 넣으면 된다.
BufferedReader로 Stream 데이터를 가져오기 위해선 위 코드처럼 readLine() 메소드를 사용하면 된다.
이 메소드는 Stream에 담긴 데이터를 개행을 기준으로 한줄씩 데이터를 String형태로 가져올 수 있다.