BE/Java

[Java] BufferedReader

baek-dev 2025. 3. 17. 19:04

✅ BufferedReader의 모든 요소 (메서드 및 기능)

 

BufferedReader입력을 효율적으로 처리하는 Java 클래스로, 버퍼를 사용하여 빠르게 문자열을 읽을 수 있는 기능을 제공합니다.

 

✅ 1. BufferedReader 생성자

BufferedReader다음과 같은 생성자를 제공합니다.

public BufferedReader(Reader in)                 // 기본 생성자 (Reader 객체 필요)
public BufferedReader(Reader in, int bufferSize) // 버퍼 크기 지정 가능

📌 Reader 객체 (InputStreamReader, FileReader 등)를 전달해야 함

📌 기본 버퍼 크기는 8192 bytes (8KB)

 

📌 예제

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        System.out.println("입력된 값: " + line);
        br.close();
    }
}

 

✅ 2. 주요 메서드

✅ 1) readLine() → 한 줄씩 읽기 (String 반환)

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
System.out.println(line);

📌 한 줄을 읽고 개행 문자(엔터)는 포함되지 않음

📌 입력이 없으면 null 반환

 

✅ 2) read() → 한 문자씩 읽기 (int 반환)

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int charValue = br.read(); // 한 문자 입력
System.out.println((char) charValue);

📌 아스키 코드값을 반환하므로 (char) 캐스팅 필요

📌 입력이 없으면 -1 반환

 

✅ 3) read(char[] buffer, int off, int len) → 문자 배열에 읽기

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] buffer = new char[10];
int numCharsRead = br.read(buffer, 0, 5); // 최대 5개 문자 읽기
System.out.println(new String(buffer, 0, numCharsRead));

📌 off배열 시작 인덱스, len읽을 문자 수

📌 파일이나 긴 문자열을 한 번에 읽을 때 유용

 

✅ 4) skip(long n) → n개의 문자 건너뛰기

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.skip(5); // 처음 5글자 건너뜀

📌 읽기 포인터를 n만큼 이동

📌 파일 읽기 시 특정 부분을 건너뛸 때 사용

 

✅ 5) ready() → 입력이 준비되었는지 확인 (boolean 반환)

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
if (br.ready()) {
    System.out.println(br.readLine());
}

📌 입력이 존재하면 true, 없으면 false

📌 System.in에서는 항상 false 반환될 수도 있음 (버퍼링 방식 차이 때문)

 

✅ 6) mark(int readAheadLimit) → 현재 위치 저장

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.mark(100); // 최대 100문자까지 되돌리기 가능

📌 reset()과 함께 사용하여 특정 위치로 되돌릴 수 있음

📌 readAheadLimit을 초과하면 mark가 무효화됨

 

✅ 7) reset() → mark() 위치로 되돌리기

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.mark(10); // 10문자까지만 저장 가능
System.out.println((char) br.read()); // 1문자 읽기
br.reset(); // 되돌리기
System.out.println((char) br.read()); // 다시 처음부터 읽기

📌 mark() 한 위치로 되돌릴 수 있음

 

✅ 8) close() → 스트림 닫기

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

📌 파일 또는 네트워크 스트림 사용 시 close() 필수

 

✅ 3. BufferedReader + FileReader (파일 입력)

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("test.txt"));
        
        String line;
        while ((line = br.readLine()) != null) { // 한 줄씩 읽기
            System.out.println(line);
        }
        
        br.close();
    }
}

📌 파일을 읽을 때 FileReader와 함께 사용

📌 null이 반환될 때까지 읽으면 파일 끝(EOF)

 

✅ 4. BufferedReader + InputStreamReader (콘솔 입력)

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("이름을 입력하세요: ");
        String name = br.readLine();
        System.out.println("입력된 이름: " + name);
        br.close();
    }
}

📌 System.in은 바이트 기반이므로 InputStreamReader와 함께 사용해야 함

📌 readLine()을 사용하면 한 줄 전체 입력 가능

 

✅ 5. BufferedReader vs Scanner

기능 BufferedReader Scanner
입력 방식 readLine()으로 한 줄 입력 next(), nextInt() 등 다양한 방식
입력 속도 빠름 (버퍼 사용) 느림 (버퍼 없음)
공백 처리 수동 처리 필요 자동 분리 가능
데이터 변환 Integer.parseInt() 필요 nextInt(), nextDouble() 사용 가능
사용 사례 대량 데이터 입력 소규모 입력, 간단한 콘솔 입력

📌 BufferedReader는 속도가 빠르므로 대량 데이터 입력 처리에 유리

📌 Scanner는 nextInt(), nextDouble() 같은 편의 기능이 많음

 

✅ 6. BufferedReader + StringTokenizer (빠른 입력 처리)

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken()); // 공백 단위로 분리된 토큰 출력
        }

        br.close();
    }
}

📌 입력 속도가 빠르고, 공백 단위로 데이터를 쉽게 분리 가능

 

✅ 7. BufferedReader 주요 메서드 정리

메서드 설명
readLine() 한 줄 읽기 (null 반환 가능)
read() 한 문자 읽기 (int 반환)
read(char[] buffer, int off, int len) 문자 배열에 읽기
skip(long n) n개 문자 건너뛰기
ready() 입력이 준비되었는지 확인 (boolean)
mark(int readAheadLimit) 현재 위치 저장
reset() mark() 한 위치로 되돌리기
close() 스트림 닫기

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[Java] 체인호출  (0) 2025.03.24
[Java] File I/O  (0) 2025.03.18
[Java] StringTokenizer  (0) 2025.03.16
[Java] 네이버 포매터(Naver Formatter)  (0) 2025.03.11
[Java] 롬복과 어노테이션 프로세서  (1) 2025.03.08