Language/Java

[Java] - BufferedReader

leegeonwoo 2023. 10. 18. 05:12
역할

 

BufferedReader를 한 문장으로 정리하자면

Byte타입으로 전송되는 데이터를 Char형으로 변환하고 버퍼링을 적용하여 Char데이터를 반환한다.

 

Char타입으로 반환된다고 했는데 왜 문자열로 출력되는거지?

 

그 답은 바로 버퍼(Buffer)를 사용하기 때문이다.

Char타입 문자를 하나씩 입력받아 버퍼에 문자를 쌓아둔 뒤 한번에 문자열처럼 출력하기때문이다.

 


파해쳐보기

 

BufferdReader import

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

 

BufferedReader를 사용하기 위해서는 위 세 가지 구문을 import해와야한다.


IOException

BufferedReader를 사용하기위해서는 IOException처리를 해야합니다.

 

public static void main(String[] args) throws IOException

 

위와 같이 main메서드 뒤에 throws IOEception을 추가해주면 됩니다.

 


 

BufferedReader 객체생성

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 

InputStreamReader에 대해서도 설명하고 싶어 여기저기 설명 글 읽어보고 책에서도 찾아봤지만, 100%이해하기 어렵기도하고..

딥하게 들어가야 정확하게 설명할 수 있다고 생각하기때문에 스트림에대해서는 후에 따로 블로깅하도록하겠다..

지금은 BufferedReader설명하는 것도 벅차다..

 


 

BufferedReader 메서드

BufferedReader는 문자열을 입력받기 위해 대표적으로 read()와 readLine()을 사용한다.

readerLine()은 한 줄을 읽어오고, read()는 한 문자만 읽어온다.

 

Scanner의 next()와 nextLine()과 비슷하지만 다르다는걸 알아두자

 

read()

read()의 경우에는 한 문자만 읽어오며, 읽어온 문자를 아스키코드로 읽기때문에 정수형태로 반환된다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int a = br.read();
		System.out.println(a);
		br.readLine();
		int b = br.read();
		System.out.println(b);
	}
}

 

이해하기 쉽게 직접 코드를 작성해보고 실행결과를 살펴보자

 

 

0을 입력하면 아스키코드인 48이 반환되고, a를 입력하면 97이 반환되는걸 확인할 수 있다.

 

또한 read()는 공백도 인식하여 읽는다.

 

이러한 이유로 read()메서드는 잘 사용하지않고 보통 readLine()메서드를 사용한다.

 

 


정리

 

BufferedReader와 Scanner의 차이는

BufferedReader는 문자열을 단순히 읽고 저장하는 것이 주 목적이며, Scanner는 문자열을 사용자가 사용하기 쉽게 가공을 해줍니다.

이 과정에서 속도는 저하되기때문에 단순히 입력을 위해서는 BufferedReader를 사용하는것이 속도면에서 효율적이라고 할 수 있습니다.


 

728x90
댓글수0