본문 바로가기
Language/Java

[JAVA] InputStreamReader 란?? (+ BufferedReader)

by jungwon3004 2022. 1. 17.
728x90
반응형

0. 서론 (배경설명)

이전 글에서 BufferedReader에 대해서 알아봤다.

(Scanner vs BufferedReader 글을 통해 소개했었다. 궁금하면 아래 링크로 들어가보자)

 

[JAVA] Scanner 와 BufferedReader 차이 & 사용법

1. 사용법 (1) Scanner import java.util.Scanner public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); int i = in.nextInt(); String s = in.next(); String sl =..

moonsonghada.tistory.com

 

또 Stream은 뭐고, InputStream, OutputStream은 무엇인지도 소개했었다.

 

[JAVA] 스트림 Stream 이란?

0. 서론 java를 공부하다보면 stream이라는 말을 굉장히 많이 들어보게 된다. 아마 대부분 초보자분들이라면 BufferedReader 할 때 들어봤을 것이다. import java.io.BufferedReader; import java.InputStreamRead..

moonsonghada.tistory.com

 

하지만 이쯤되면 궁금해진다.

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

여기서 나오는 InputStreamReader 와 InputStream 은 어떤 관계일까??

 

 

 

1. InputStreamReader

public class InputStreamReader extends Reader

놀랍게도 InputStreamReader는 Reader class를 상속(inheritnace)한다.

InputStream이 아니다!

 

java.io.InputStreamReader라는 class의 package는 java.io.Reader이다.

java.io.InputStream과에 속하는 것이 아니다.

 

그렇다면 왜 이름이 InputStreamReader일까??

바로 parameter가 InputStream instance이기 때문이다.

InputStreamReader(InputStream in){...}
InputStreamReader(InputStream in, Charset cs){...}
InputStreamReader(InputStream in, CharsetDecoder dec){...}
InputStreamReader(InputStream in, String charsetName){...}

어떤 경우라도 InputStream 타입의 instance는 필수적으로 들어가야 한다.

이것이 그 이유이다.

 

728x90

 

2. System.in

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

우리 지금 분석하고 있는 이 코드를 보자.

BufferedReader의 instance를 생성하기 위해 new BufferedReadr(new InputStreamReader(System.in)) 라는 코드를 작성했다.

 

new BufferedReader()의 argument로 new InputStreamReader(System.in)이라는 instance를 넣어줬다.

 

여기서 new InputStreamReader() 에서 argument로 System.in을 넣어줬다.

우리는 이제 System.in이 InputStream의 instance라는 걸 알 수 있다.

즉, in은 System class으 field이고 그 in의 type은 InputStream이라는 것이다.

 

 

 

3. BufferedReader

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

이 코드를 한 번 더 보자.

이제 우리는 new InputStreamReader(System.in) 까지는 이해했다.

 

마지막으로 BufferedReader만 이해하면 된다.

 

BufferedReaderd의 Constructor를 보면

BufferedReader(Reader in)
BufferedReader(Reader in, int size)

이렇게 되어있다.

InputStreamReader가 Reader를 상속하고 있기 때문에 가능한 것이다.

 

 

반응형

3. BufferedReader instance의 활용

이제 BufferedRreader의 method들을 알아보면 된다.

가장 많이 사용되는 것들을 보자.

 

(1) String type : 한 줄 전체

: Scanner로 치면 nextLine()

String s = bf.readLine();

//만약 맨 처음 공백은 제거하고 싶다면
String s2 = bf.readLine().trim();

(2) String type : 공백 이전까지

: Scanner로 치면 next()

bf.readLine()으로 받은 string을 split() 등을 활용해 처음 껏만 사용해야 한다.

 

(3) int type

int T = Integer.parseInt(br.readLine());

물론 이 경우, Exception 처리를 해줘야 한다.

728x90
반응형