sitelink1 https://coding-factory.tistory.com/251 
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

BufferedReader/BufferedWriter는 Buffer에 있는 IO 클래스입니다. 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달되됩니다. 출력도 마찬가지로 버퍼를 거쳐서 간접적으로 출력장치로 전달되기에 시스템의 데이터처리 효율성을 높여주며 버퍼스트림을InputStreamReader / OutputStreamWriter를 같이 사용하여 버퍼링을 하게 되면 입출력 스트림으로부터 미리 버퍼에 데이터를 갖다 놓기 때문에 보다 효율적인 입출력이 가능합니다.

 

 

▶BufferedReader 

Java를 처음 접하시는 분들이 주로 받는 입력방식은 Scanner입니다. Scanner를 통해 입력을 받을경우 Space Enter를 모두 경계로 인식하기에 입력받은 데이터를 가공하기 매우 편리합니다. 하지만 그에비해 BufferedReader는 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기때문에 입력받은 데이터를 가공하는 작업이 필요할경우가 많습니다. Scanner에 비해 다소 사용하기 불편하죠. 하지만 많은 양의 데이터를 입력받을경우 BufferedReader를 통해 입력받는 것이 효율면에서 훨씬 낫습니다. 입력시 Buffer 메모리줌으로써 작업속도 차이가 많이납니다.

 

BufferedReader 사용법

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = bf.readLine(); //String
int i = Integer.parseInt(bf.readLine()); //Int

 선언은 위에 있는 예제와 같이 하시면 됩니다. 입력은 readLine();이라는 메서드를 활용하시면 되는데요. 여기서 주의할점이 두가지가 있습니다. 첫번째는 readLine()시 리턴값을 String으로 고정되기에 String이 아닌 다른타입으로 입력을 받을려면 형변환을 꼭 해주어야한다는 점입니다. 두번째는 예외처리를 꼭 해주어야한다는 점입니다. readLine을 할때마다 try & catch를 활용하여 예외처리를 해주어도 되지만 대개 throws IOException을 통하여 작업합니다.

 

Read한 데이터 가공

StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출

String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음

 Read한 데이터는 Line단위로만 나눠지기에 공백단위로 데이터를 가공하려면 따로 작업을 해주어야하는데요. 위의 두가지 방법이 대표적입니다. 첫번째 방법으로는 StringTokenizer에 nextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출할 수 있습니다. 두번째방법으로는 String.split()함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용하는 방식입니다.

 

▶BufferedWriter 

일반적으로 출력을할때 System.out.println(""); 방식을 사용하고는 합니다. 적은양의 출력일 경우 성능차이가 미미하겠지만 많은 양의 출력에서는 입력과 마찬가지로 Buffer를 활용해주시는것이 좋습니다.

 

BufferedWriter 사용법

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//선언
String s = "abcdefg";//출력할 문자열
bw.write(s+"\n");//출력
bw.flush();//남아있는 데이터를 모두 출력시킴
bw.close();//스트림을 닫음

BufferedWriter 의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close() 를 반드시 호출해 주어 뒤처리를 해주어야합니다. 그리고 bw.write에는 System.out.println();과 같이 자동개행기능이 없기때문에 개행을 해주어야할 경우에는 \n를 통해 따로 처리해주어야합니다.

 

주요 Method

메서드명 

 기능

 BufferedReader(Reader rd)

 rd에 연결되는 문자입력 버퍼스트림 생성

 BufferedWriter(Writer wt) 

 wt에 연결되는 문자출력 버퍼스트림 생성​

 int read()

 스트림으로부터 한 문자를 읽어서 int 형으로 리턴

 int read(char[] buf)

 문자배열 buf의 크기만큼 문자를 읽어들임.  읽어들인 문자 수를 리턴

 int read(char[] buf, int offset, int length)

 buf의 offset위치에서부터 length 길이만큼 문자를 스트림으로부터 읽어들임​

 String readLine()

 스트림으로부터 한 줄을 읽어 문자열로 리턴​​

 void mark() 

 현재우치를 마킹, 차 후 reset() 을 이용하여 마킹위치부터 시작함

 void reset() 

 마킹이 있으면 그 위치에서부터 다시시각, 그렇지 않으면 처음부터 다시시작

 long skip(int n)

 n 개의 문자를 건너 뜀

 void close()

 스트림 닫음

 void write(int c)

 int 형으로 문자 데이터를 출력문자스트림으로 출력

 void write(String s, int offset, int length)

 문자열 s를 offset 위치부터 length 길이만큼을 출력스트림으로 출력

 void write(char[] buf, int offset, int length)

 문자배열 buf의 offset 위치부터 length 길이만큼을 출력스트림으로 출력​​​

 void newLine()

 줄바꿈 문자열 출력

 void flush() 

 남아있는 데이터를 모두 출력시킴.

 

번호 제목 글쓴이 날짜 조회 수
311 ResultSet 의 사이즈로 조회 결과가 있는지 확인 황제낙엽 2021.01.14 42
310 지정한 일자보다 하루 뒤로 설정하기 황제낙엽 2021.01.14 15
309 for, while 등의 loop구문에서 sleep하기 황제낙엽 2020.12.04 55
308 미디어 파일의 metadata를 읽자 (metadata-extractor) file 황제낙엽 2020.08.30 583
307 [HttpURLConnection] Authorization 헤더를 넣어 GET Request 황제낙엽 2020.08.12 376
306 직접 작성한 PropertiesUtil.java 황제낙엽 2020.07.21 35
305 [Online Book] manning사의 making java groovy 황제낙엽 2020.06.19 30
304 자바(JAVA) 어노테이션(Annotation) 황제낙엽 2020.04.10 29
303 [AWS, 웹 프로젝트] AWS+MySQL+SpringFrameWork5+JAVA8+ React+Gradle+Webpack+GIT+Jenkins file 황제낙엽 2020.04.08 48
302 Runtime 클래스의 exec() 함수 실행시의 실행 결과 수집 황제낙엽 2020.03.26 72
301 SQLite JDBC Driver 황제낙엽 2020.02.25 131
300 MySQL 한글깨짐현상 제거 ( UTF8 ) 황제낙엽 2019.12.08 573
299 java.util.ConcurrentModificationException 황제낙엽 2019.09.08 62
298 String, StringBuilder, StringBuffer file 황제낙엽 2019.08.03 58
297 String vs StringBuffer vs StringBuilder in Java 황제낙엽 2019.08.03 219
296 Calendar.set() - 날짜 설정하기, Calendar.add() - 날짜 더하기, Calendar.roll() - 그 부분만 날짜 더하기 황제낙엽 2019.08.02 89
295 File 클래스 정리 황제낙엽 2019.07.29 91
294 파일 사이즈를 반환하는 유틸 함수 황제낙엽 2019.07.29 120
» BufferedReader, BufferedWriter를 활용한 빠른 입출력 황제낙엽 2019.07.29 77
292 현재날짜, 현재시간을 원하는 형태로 출력하는(Format) 다양한 방법 file 황제낙엽 2019.07.29 66