메모장

BufferedReader 클래스 본문

JAVA/개념정리

BufferedReader 클래스

Itchild 2024. 4. 8. 17:37
728x90
반응형

 

버퍼를 이용하는 대표적인 I/O(Input/Output) 클래스

입력된 데이터를 바로 전달하는 것이 아닌, 버퍼에 저장해두었다가 전달하는 방법이다

 

scanner 와 비교했을 때,

양이 많을 경우에 하나하나씩 전달하지 않고 버퍼에 한 번에 모아서 전달하는 BufferedReader클래스가 속도면에서 빠르고 효율적이다

 

버퍼를 사용하는 이유

- 하드디스크는 원래 속도가 엄청 느리다. 또한, 키보드나 모니터와 같은 외부 장치와의 데이터 입출력도 생각보다

시간이 걸리는 작업이다.

- 버퍼링없이 키보드가 눌릴 때 마다 눌린 문자의 정보를 목적지로 바로 이동시키는 것보다, 중간에 메모리 버퍼를 두어 데이터를 한번에 묶어 이동시키는 것이 보다 효율적이고 빠르다.

- 그냥 전송하게 되면 CPU와 성능 갭이 많이 나서 비효율적이다.

예시를 들면 흙을 파서 멀리 있는 언덕에 버리는데, 한 번 삽질할 때마다 가서 버리는 것보다, 수레에 가득 채워서 한번에 나르는 것이 효율적인 것과 같은 이치이다. 다른 예시로는 쓰레기통 하나 담으면 바로 비우는게 아니라 쓰레기통에 꽉차게 되면 한번에 버리는 것 . 즉, 모아뒀다가 한 번에 전송하는 것이 훨씬 효율적!

 

주요 Method

 

1-1) int read()

: 스트림으로부터 한 문자를 읽어서 int형으로 리턴 ('3' -> (int)'3' -> 51)

 

1-2) int read(char[] buf)

: 스트림으로부터 buf의 크기만큼 문자를 읽음. 문자 수 리턴

 

1-3) int read(char[] buf, int offset, int length)

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

 

2) String readLine()

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

 

3-1) void mark()

: 스트림의 현재위치를 마킹, 차후 reset() 이용하여 마킹위치부터 시작

 

3-2) void reset()

: 마킹이 있으면 그 위치부터, 없으면 처음부터 다시 시작

 

4) long skip(int n)

: n개의 문자를 건너 뜀

 

 

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

✔️ 주의점

 

1️⃣ readLine()시 리턴값을 String으로 고정되기에 String이 아닌 다른타입으로 입력을 받을려면 형변환을 꼭 해주어야한다는 점입니다.

 

2️⃣예외처리를 꼭 해주어야한다는 점입니다. readLine을 할때마다 try & catch를 활용하여 예외처리를 해주어도 되지만 대개 throws IOException을 통하여 작업합니다.

 

 

 

728x90
반응형