본문 바로가기

develop

BufferedReader, BufferedWriter

BufferedReader와 BufferedWriter는 Buffer에 있는 IO 클래스이다.

입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달된다. 출력도 마찬가지로 버퍼를 거쳐서 간접적으로 출력 장지로 전달되기에 시스템의 데이터 처리 효율성을 높여주며

버퍼 스트림 InputStreamReader / OutputStreamWriter를 같이 사용하여 버퍼링을 하게 되면 입출력 스트림으로부터 미리 버퍼에 데이터를 갖다 놓기 때문에 보다 효율적인 입출력이 가능하다.

 


 

BufferedReader

 

Scanner와의 차이를 말하자면,

Scanner를 통해 입력을 받을 경우 Space, Enter를 모두 경계로 인식하기에 입력받은 데이터를 가공하기 매우 편리하다.

하지만 BufferedReader는 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 가공하는 작업이 필요한 경우가 많다.

Scanner에 비해 다소 불편하다. 하지만 많은 양의 데이터를 입력받을 경우 BufferedReader를 통해 입력받는 것이 효율, 속도면에서 훨씬 낫다.

 

사용법

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언

String s = bf.readLine();   //String                                                                                    

int i = Integer.parseInt(bf.readLine());     //Int                                                                 

 

주의사항은 readLine() 시 String으로 고정되기에 다른 타입으로 입력을 받으려면 형 변환을 꼭 해주어야 한다.

또한, 예외처리를 꼭 해주어야 한다. readLine을 할 때마다 try & catch를 활용하여 예외처리를 해주어도 되지만

throws IOException을 통해 작업한다.

 


 

BufferedWriter

 

일반적으로 출력을 할 때 System.out.println(); 방식을 사용한다.

많은 양의 출력에서는 입력과 마찬가지로 Buffer를 활용해주는 것이 좋다.

 

사용법

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언

String s = "abcde";  // 출력할 문자열                                                                                     

bw.write(s);   // 출력                                                                                                            

bw.newLine();  // 줄 바꿈                                                                                                      

bw.flush(); // 남아있는 데이터 모두 출력시킴                                                                         

bw.close(); // 스트림 닫음                                                                                                     

 

BufferedWriter의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush()와 close()를 반드시 호출해 주어 뒤처리를 해야 한다.