프로그래밍 언어/java
Java 입출력
당장하자
2024. 9. 12. 17:38
BufferedReader
System.in 은 자바에서 표준 입력 스트림을 나타낸다.
InputStreamReader 는 바이트 스트림인 System.in 을 문자 스트림으로 변환한다. 즉, 바이트 단위로 입력받은 데이터를 char 단위로 처리할 수 있게 해준다.
BufferedReader 는 문자 입력 스트림에 버퍼링을 수행한다.
readLine() 메서드는 BufferedReader 객체를 통해 호출되며, 사용자로부터 한 줄의 문자열 입력을 받는다. 이 메서드는 사용자가 입력한 데이터의 끝을 나타내는 엔터(Enter) 키를 입력할 때까지 기다린다.
- 읽을 줄이 없거나 입출력 오류가 발생하면 IOException 을 발생시킬 수 있다.
- 만약 입력 소스의 끝에 도달하거나 더 이상 읽을 데이터가 없으면 readLine() 메서드는 null을 반환한다.
public static void main(String[] args) throws IOException { // 입력 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); n = Integer.parseInt(br.readLine()); }
BufferedReader는 데이터를 한 번에 많은 양을 읽어서 내부 버퍼에 저장한다. 그런 다음 프로그램이 데이터를 요청할 때마다 이 버퍼에서 데이터를 제공합니다.
- 이 과정은 데이터 소스(예: 키보드, 파일 등)에서 직접적으로 조금씩 읽는 것보다 훨씬 효율적이다. 왜냐하면 입출력(I/O) 작업이 시스템에 비용이 많이 드는 작업이기 때문이다. 버퍼링을 통해 I/O 호출의 횟수를 줄일 수 있으므로 전체적인 성능이 향상된다.
Scanner와의 비교
- Scanner 또한 입력 과정에서 버퍼를 사용한다. 하지만 버퍼의 크기가 1024문자(1KB)로 정해져 있고 정규 표현식을 사용하여 입력을 파싱하는 과정 때문에, 복잡한 입력 처리 작업에서는 BufferedReader 보다 느리다.
StringTokenizer
- StringTokenizer 는 정규 표현식을 사용하지 않고 정해진 구분자를 기분으로 문자열을 구분한다. 매우 단순한 방식으로 문자열을 나눈다.
- 복잡한 분리 규칙을 필요로 한다면 String의 split 메서드나 Pattern 을 사용하는 것이 더 적합하다.