Java - Buffer

BufferedReader, BufferedWriter의 그 Buffer가 무엇인지 알아보자

Posted by Yan on April 18, 2021

Buffer란?

  • 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리 영역을 의미
  • 속도 차이가 있는 장치 사이에서 데이터를 전송할 때, 데이터 손식을 방지하고, 효율적으로 사용하기 위한 임시 저장공간
  • 버퍼링 : 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작
  • 유튜브에서 동영상을 재생할 때, 재생중인 붉은색 바와, 다운로드 받고 있는 회색 바가 나타남. 회색이 버퍼의 영역. 인터넷이 느리면 다운로드 받는 속도보다 시청 속도가 빨라서 버퍼링이 걸리게 되는 것.

BufferedReader, BufferedWriter

  • Buffer를 이용하여 데이터를 읽거나 쓰도록 구현된 클래스
  • 데이터를 읽거나 쓸 때마다 I/O에 접근하지 않고 Buffer에 저장해둔 것을 읽거나 Buffer에 쓰기 때문에 I/O 작업 빈도가 적음.
  • I/O에 접근하는 빈도가 적기 때문에 read/write 성능이 좋아짐.

BufferedReader

1
BufferedReader reader = new BufferedReader(new FileReader("파일"));
  • FileReader 객체로 데이터를 읽고, 이 FileReader에 Buffer를 적용

BufferedReader

데이터 읽기

  • readLine()을 이용해 개행문자를 기준으로 한 줄 단위로 읽어올 수 있음
  • null이 리턴되면 파일의 끝에 도달했음을 의미함
  • null이 리턴되었을 때 파일 읽기를 중단하기 위해서 while문을 사용함
1
2
3
4
String line;
while((line = reader.readLine()) != null) {
	System.out.println(line);
}

사용자로부터 입력받기

1
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  • FileReader가 아니라 InputStreamReader를 사용해서 사용자의 입력을 받을 수 있다.
  • 입력을 받는 동시에 출력하도록 구현할 수도 있다.
1
2
3
4
5
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line;
while((line = reader.readLine()) != null) {
	System.out.println(line);
}

BufferedWriter

파일에 데이터 쓰기

1
BufferedWriter writer = new BufferedWriter(new FileWriter("파일경로");
  • 파일에 데이터를 쓰기 위해 BufferedWriter에 FileWriter를 전달해서 사용할 수 있다.
  • append()로 데이터를 버퍼에 쓸 수 있다. 단, 파일에 저장되는 것은 아니다
  • flush()로 버퍼에 있는 데이터가 파일에 저장된다.
  • close()를 호출해서 BufferedWriter를 닫으면서 버퍼의 내용을 파일에 쓸 수도 있다.
  • 버퍼의 양보다 큰 데이터를 입력하면 자동으로 flush() 가 호출되면서 버퍼의 데이터가 파일에 저장될 수 있다.

Console에 데이터 출력하기

1
2
3
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.in));
writer.append("hello");
writer.close();

참고자료 Buffer 콘솔에서 읽기쓰기