본문 바로가기

웹 프로그래밍/JAVA

[JAVA] BufferedReader, BufferedWriter

728x90
반응형

이번엔 BufferedReader와 BufferedWriter 함수에 대해 알아보자.

BufferedReader와 BufferedWriter는 함수 이름을 보면 알 수 있듯이 버퍼를 이용해서 읽고 쓰는 함수이다.

 

위의 이미지에서 보듯 버퍼를 사용하지 않고 입력을 받게 되면, 키가 눌리는 즉시 바로 입력된다.

반면 BufferedReader를 사용하면 버퍼가 가득 차저가, 개행 문자가 눌리면 버퍼의 내용을 한 번에 전송해준다.

 

그렇다면 왜 버퍼를 사용하는게 더 효율적이고 빠른지에 의문이 생길 수 있다. 

예시를 통해 이해를 돕자면, 만약 우리가 커다란 항아리에 물을 채워넣어야 한다고 하자. 그 때 컵으로 한번씩 왔다갔다 하면서 물을 채워 넣는 것보다 대야에 물을 가득 담아 항아리에 물을 채워 넣는 것이 훨씬 빠르고 효율적일 것이다. 

이와 같은 원리다 ^^

 

그럼 BufferedReader와 BufferedWriter에 더 알아보자

 

BufferedReader

  • Scanner는 띄어쓰기와 엔터를 경계로 입력 값을 인식하여 따로 가공할 필요가 없다
  • BufferedReader는 엔터만 경계로 값을 인식하고 받은 데이터가 String으로 고정된다. 때문에 Scanner에 비해 가공해야 하는 경우가 많지만, Scanner에 비해 비교적 속도가 빠르다
    • 공백 단위로 데이터를 읽고 싶은 경우 StringTokenizernextToken 함수, Stringsplit 함수를 이용한다

BufferedReader Method

Modifier and Type Method and Description
void close()
void mark(int, readAheadLimit)
스트림의 현재 위치를 마킹
boolean markSupported()
스트림이 mark 기능을 지원하는지 true/false로 알려준다
int read()<br />한 글자만 읽어 정수형으로 반환
3을 '3'으로 읽어서 '3'의 정수형인 51 반환
3을 입력하여 3을 리턴해주는 함수가 아니다
int read(char[] cbuf, int offset, int length)
cbuf 의 offset 위치부터 length 길이만큼 문자를 스트림으로 읽어온다
String readLine()
한 줄을 읽어 String으로 반환
boolean ready()
입력 스트림이 사용할 준비가 되었는지 확인. 1이면 준비 완료
void reset()
마킹이 있으면 그 위치부터 다시 시작, 그렇지 않으면 처음부터 다시 시작
long skip(long n)
n개의 문자를 건너뛴다

 

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

// ----데이터 가공----

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

String array[] = s.split(" ");


BufferdWriter

  • System.out.println(""); 와 동일하게 사용 가능한 함수
  • 성능면에서 좋다. 많은 출력을 할 때 사용하면 좋다
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = "abcdefg";
bw.write(s); // 출력
bw.newLine(); // 줄바꿈
bw.flush(); // 남아있는 데이터를 모두 출력
bw.close(); // 스트림 닫기

 

참조 : jhnyang.tistory.com/92

 

728x90
반응형

'웹 프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] JAVA 특징  (0) 2021.10.18
[JAVA] 정규표현식  (0) 2021.08.28
LocalDate, LocalTime, LocalDateTime  (0) 2021.05.20
[JAVA] LinkedList란?  (0) 2021.04.29
[JAVA] ArrayList란?  (0) 2021.04.29