SCPC

[#00_ BufferedReader & BufferedWriter 정리]

Mink__02 2023. 9. 28. 12:28
*Buffered Reader

 

- buffer을 거쳐 전달되서 데이터 처리 효율성을 증가시킨다.

- 많은 양의 데이터를 처리할 때 유리하다.

- enter로 경계 인식& 받은 데이터는 String으로 고정

           -> 입력받은 데이터를 가공하는 작업이 필요하다.

- import 필수로 해줘야한다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

 

 

 - System.in : console에서 data 를 입력받을 때 사용

    inputStream 타입의 필드인 system class의 in 정적 필드. -> inputstream 을 이용해 read 하면, 1byte 밖에 못 읽는다.

    => inputstreamreader을 이용해 2byte인 한글도 읽을 수 있도록 한다.

 

- InputStreamReader : byte 단위 -> char 단위로 입력 받기 가능(0)

   배열 크기를 일일이 지정해줘야한다는 단점 -> bufferedreader을 사용하자!

 

- BufferedReader: inputstreamdearder가 입 \n이 입력되기 전까지 받은 모든 텍스트를 저장.

  Scanner보다 메모리 적으로 더 효율이 있다.

- throws IOException: BufferedReader을 사용할 때, 입력받을 때마다 try&catch를 사용해야한다. 

   BufferedReader 사용 자동화를 위해 main 뒤에 throws IOException을 사용해주면 된다..

#

[정리]

 

console에서 입력값을 받을껀데 (system.in) 

새로운 객체를 만들어 2byte단위로 입력값을 읽을래 ( new InputStreamReader)

근데 매번 배열 지정이 귀찮으니까 바로바로 저장할 수 있도록 새로운 객체를 생성할래 (new BufferedReader)

또한, 매번 입력 받을 때마다, try & catch 사용이 귀찮으니까

IOException을 이용해 자동화 처리를 하자 ( * main(*) throws IOException )

Read한 data: 공백단위로 가공하는 방법

 

 


 

bufferedReader 활용

(1) String

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

 한줄을 읽어 String type으로 값을 가져올 때 사용

ex) ulsanhyundai fc --> "ulsanhyundai fc"

 

(2) String[]_ split

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

한 줄을 읽어 공백 " "을 기준으로 나눠 String array를 가져올 때 사용

ex. Ulsan Hyundai Football Club -->{"Ulsan", "Hyundai","Football","Club"}

 

(3) String[]_ StringTokenizer

StringTokenizer st = new StringTokenizer(s);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());

StringTokenizer은 자동으로 공백단위로 쪼개준다.

(4) Int

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

한 줄을 읽어 string type의 숫자를 읽어 int형으로 변환 & 저장. 

!! 한줄에 숫자가 하나만 있을 때 사용할 수 있다.

 

(5) int[] & Sort

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] ary = br.readLine().split(" ");//공백단위로 끊어서 String으로 저장
aryInt = new int[n]; //int형 array 생성
for ( int i =0; i<n; i++)
	aryInt[i]=Integer.parseInt(ary[i]);//ary[i]값을 정수로 받아서 저장.
Arrays.sort(aryInt);//배열 aryInt를 오름차순으로 정렬

 


 

*Buffered Writer

 

- buffer를 잡아 놓았기 때문에, 반드시 flush()/ close() 를 호출해야한다.

- bufferwriter.write 경우, 자동 개행 기능이 없다 -> \n을 통해 따로 처리 해줘야한다.

 

 

import java.io.OutputStreaWriter;
import java.io.BufferedWriter;
 

- OutputStreamWriter: Writer class로부터 상속된 class. char -> byte로 변환해준다.