알고리즘(JAVA 사용)

[개념정리] System.in / InputStreamReader / BufferedReader 정리

코찔이_suj 2021. 7. 23. 18:18
728x90

개요

앞으로도 BufferedReader를 사용하며 자주 언급할 것 같아 한번에 정리해두고자 작성했다.

 

본론

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

 

자주사용하는 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 을 분석해보도록 하겠습니다.

 

 먼저 가장 안쪽에 있는 System.in 콘솔에서 데이터를 입력받을 때 사용하고, inputStream 타입의 필드인 System클래스의 in 정적필드입니다. System.in으로 받은 Inputstream 객체에 read함수를 실행하면 1byte밖에 읽지 못해 2byte인 한글은 읽을 수 없습니다. 그래서 InputStreamReader을 사용하게 됩니다.

 

 InputStreamReader InputStream객체를 입력으로 갖고있어야하기 때문에 new InputStreamReader(System.in)과 같은 형태가 된것입니다. 그리고 InputStreamReader가 되면서 byte로 받는 수준에서 char로 받을 수 있게 되었습니다. 하지만 배열크기를 일일이 지정해줘야해서 불편함이 남아있었습니다.

 

 그래서 사용된게 최종으로 사용된 BufferedReader입니다. BufferedReader는 InputStreamReader를 입력받아 문자열을 출력해줍니다. BufferedReader는 \n이 입력되기 직전까지 받은 모든 텍스트를 저장하고 stream이 다 차거나 null이 아니라면 그 값을 계속 갖고있습니다. 그리고 데이터를 많이 입력받을 경우 Scanner보다 메모리적으로 더 효율적입니다.

 

활용

String >>

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();

한 줄을 읽어 String 타입으로 값을 가져올 때 사용합니다.

ex. 행복한 코딩시간 --> "행복한 코딩시간"

 

String[] >>

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] strArrN = reader.readLine().split(" ");

한 줄을 읽어 " " 을 기준으로 나눠 String array를 가져올 때 사용합니다. 

ex. 나는 오늘 밥을 먹었다. --> {"나는", "오늘", "밥을", "먹었다"}

 

int >>

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int i = Integer.parseInt(reader.readLine());

한 줄을 읽어 string 타입의 숫자를 읽어 int로 형변환을 해 저장합니다. 한 줄에 숫자가 하나만 있을 때 사용할 수 있습니다. (문자나 숫자를 제외한 값이 있을 경우 에러 발생)

ex. 3 --> 3

 

int[] & Sort >>

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] strArrN = reader.readLine().split(" ");
arrAList = new int[n];
for(int i =0;i<n;i++) arrAList[i]=Integer.parseInt(strArrN[i]);
Arrays.sort(arrAList);

String[]를 하나씩 빼내어 int형으로 변환해 int[]에 넣어줍니다.

ex. {"3","9","-2","0","-100"} --> {3,9,-2,0,-100}

 

Arrays.sort(배열)을 통해 파라미터로 넣은 배열을 오름차순으로 정렬해줍니다. (내림차순인 경우 구글에 "java comparator"를 검색하시면 다양한 방법을 금손분들께서 설명해주실 겁니다...)

ex. {3,9,-2,0,-100} --> {-100,-2,0,3,9}

ex. {"a","t","i","o"} --> {"a","i","o","t"}

 

마무리

정리하면 다음 표와 같습니다. 이렇게 정리하고나니 다음엔 안헷갈릴것 같네요!! ㅎㅎ

  InputStream(= System.in) InputStreamReader BufferedReader
읽어오는 함수 read() read() readLine()
단위(함수 리턴 타입) byte char String
단점 한글을 읽을 수 없다. 배열크기 지정이 번거롭다. 앞선 경우를 다 담아야해서 치기 귀찮다(?)