Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- 정렬
- 병합정렬
- 백준
- java
- 수학
- 다이나믹프로그래밍
- 선택정렬
- 알고리즘
- 정수론
- 계수정렬
- 백트래킹
- 프로그래밍
- DP
- SNS
- 자바
- 퀵정렬
- 삽입정렬
- 힙정렬
- Median of Medians
- 프로그래밍언어
- 동적계획법
- 재귀
- 선택알고리즘
- 안드로이드
- C++
- 동적프로그래밍
- 기수정렬
- 코딩테스트
- 버블정렬
Archives
- Today
- Total
MODE::CREATIVE
[JAVA] java의 입력(Buffered reader) 본문
1. BufferedReader는 왜 쓸까?
Java의 BufferedReader 클래스는 입력 데이터를 효율적으로 처리하기 위해 제공되는 클래스입니다. java.io 패키지에 포함되어 있으며, 입력 스트림에서 데이터를 버퍼링(buffering)하여 처리 속도를 향상시킵니다.
BufferedReader는 한 줄 단위로 문자열을 읽거나, 문자 단위로 데이터를 읽는 데 적합하며, 대용량 데이터를 다룰 때 유용합니다.
2. BufferedReader의 특징
- 버퍼링(buffering) 지원:
- 데이터를 메모리에 일시 저장(buffer)한 후 읽기 때문에 처리 속도가 빠릅니다.
- 직접 스트림을 읽는 것보다 효율적입니다.
- 줄 단위 입력:
readLine()
메소드를 사용해 데이터를 한 줄씩 읽을 수 있습니다.
- 문자 기반 입력 처리:
- 문자 데이터를 읽는 데 최적화되어 있으며, InputStreamReader와 함께 사용해 바이트 기반 입력도 처리할 수 있습니다.
3. BufferedReader 객체 생성
BufferedReader 객체는 일반적으로 다른 입력 스트림 객체와 연결하여 사용됩니다. 대표적으로 InputStreamReader와 함께 사용됩니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- System.in: 표준 입력 스트림(키보드 입력).
- InputStreamReader: 바이트 스트림을 문자 스트림으로 변환.
4. 주요 메소드
BufferedReader에서 자주 사용되는 메소드는 다음과 같습니다.
4-1. readLine()
- 한 줄의 문자열을 읽어옵니다. (개행 문자를 제외한 데이터 반환)
- 더 이상 읽을 데이터가 없으면
null
을 반환합니다.
String line = br.readLine();
System.out.println("입력된 내용: " + line);
4-2. read()
- 한 번에 한 문자를 읽어들입니다. (문자의 정수형 유니코드 값 반환)
- 데이터가 없으면
-1
을 반환합니다.
int charValue = br.read();
System.out.println("입력된 문자: " + (char)charValue);
4-3. close()
- BufferedReader를 닫아 스트림을 해제합니다. 사용 후 반드시 호출해야 자원 누수를 방지할 수 있습니다.
br.close();
5. BufferedReader 사용 예제
5-1. 콘솔 입력 처리
BufferedReader를 사용해 키보드 입력을 처리하는 예제입니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("이름을 입력하세요: ");
String name = br.readLine();
System.out.print("나이를 입력하세요: ");
int age = Integer.parseInt(br.readLine());
System.out.println("이름: " + name);
System.out.println("나이: " + age);
} catch (IOException e) {
System.out.println("입력 오류 발생: " + e.getMessage());
}
}
}
5-2. 파일 입력 처리
BufferedReader를 사용해 파일에서 데이터를 읽는 예제입니다.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("파일 읽기 오류: " + e.getMessage());
}
}
}
6. BufferedReader와 Scanner 비교
특징 | BufferedReader | Scanner |
---|---|---|
속도 | 더 빠름 (대용량 데이터 처리에 적합) | 상대적으로 느림 |
입력 처리 단위 | 문자열 (줄 단위) | 다양한 데이터 타입 (정수, 실수 등) |
구문 분석 | 제공하지 않음 | nextInt() , nextDouble() 등 제공 |
코드 간결성 | 다소 복잡 | 간단 |
7. BufferedReader 사용 시 주의점
- 예외 처리 필요:
readLine()
과read()
메소드는 입력 시 IOException이 발생할 수 있으므로 try-catch 문으로 감싸야 합니다.
- 형 변환 필요:
- 입력받은 데이터는 기본적으로 문자열이므로, 정수나 실수로 사용하려면 형 변환이 필요합니다.
int age = Integer.parseInt(br.readLine());
- 입력받은 데이터는 기본적으로 문자열이므로, 정수나 실수로 사용하려면 형 변환이 필요합니다.
- 자원 관리:
- 사용이 끝난 후 반드시
close()
메소드를 호출하여 자원을 해제해야 합니다. (try-with-resources 사용 권장)
- 사용이 끝난 후 반드시
8. BufferedReader의 장점과 단점
장점
- 빠른 데이터 처리: 대용량 데이터를 처리할 때 효율적.
- 줄 단위 읽기 지원:
readLine()
으로 간단히 데이터 처리 가능.
단점
- 입력값 타입 변환 필요: Scanner와 달리 입력된 값을 수동으로 변환해야 함.
- 복잡성 증가: 기본적인 작업에서도 약간 더 많은 코드 작성이 필요.
9. BufferedReader와 InputStreamReader 결합의 활용
BufferedReader는 InputStreamReader와 결합해 다양한 입력 소스를 처리할 수 있습니다. 이 조합을 활용하면 콘솔 입력뿐만 아니라 파일이나 네트워크 스트림 데이터를 효율적으로 읽어들일 수 있습니다.
BufferedReader는 고성능 데이터 입력 처리에 적합하며, 특정 작업에서는 Scanner보다 좋은 선택지가 될 수 있습니다. Java 프로그래밍에서 입출력을 효율적으로 다루고자 한다면 BufferedReader를 활용해 보세요.
'JAVA' 카테고리의 다른 글
[JAVA] 자바의 main() 메서드 (0) | 2025.01.11 |
---|---|
[JAVA] 자바의 배열(Array) (0) | 2025.01.11 |
[JAVA] java의 입력(Scanner) (0) | 2024.11.10 |
[JAVA] java의 연산자, 조건문, 반복문 (1) | 2024.11.10 |
[JAVA]Java 프로그램의 기본 구조, 데이터 타입 (1) | 2024.11.10 |