T_era

[JAVA] BufferedReader와 BufferedWriter 그리고 StringTokenizer 본문

Programing/Java

[JAVA] BufferedReader와 BufferedWriter 그리고 StringTokenizer

블스뜸 2025. 3. 27. 15:11

백준 문제풀이를 하다 Buffer에 대해 보게되었다.
BufferedReader와 BufferedWriter에 대해 아라보자

BufferedReader

- 문자 입력 스트림에서 텍스트를 효율적으로 읽어들이는 데 사용되는 클래스
- 내부적으로 버퍼를 사용하여 데이터를 한 번에 일정량씩 읽어온다
- Scanner에 비해 사이즈가 월등히 크고 속도도 유의미하게 빠르

일단 사용법을 아라보자

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));
        String str = br.readLine();

        System.out.println(str);

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

- 버퍼를 선언하는 코드이다.

String str = br.readLine();

- 버퍼를 이용해 입력받는 코드인데 주요 메소드들이 있다

br.readLine();	// 입력한 한줄 전체를 String 형태로 반환하고 더 이상 읽을 내용이 없으면 거기에 null을 반환한다

br.read();		// 문자 하나를 읽어 정수형으로 반환한다.

br.skip(long n);// n개의 문자를 건너뛴다.

br.close();		// 버퍼를 닫고 사용했던 자원을 해제한다

- 위와 같은 용도로 사용한다

br.close();

- 버퍼를 사용한 이후엔 반드시 닫아줘야한다.

입력은 알겠는데 출력은 어떻게 해야할까

BufferedWriter

- 마찬가지로 성능 향상을 위한 출력 버퍼이다

사용법

import java.io.*;


public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        bw.write(br.readLine());
        
        bw.flush();
        bw.close();
        br.close();
    }
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

- 버퍼 선언 코드

bw.write(br.readLine());

- 문자열을 출력스트림에 쓰는 코드이다.

bw.write(String str);   // 출력스트림에 문자열 입력

bw.newLine();           // 출력스트림에 줄넘김 추가

bw.flush();             // 버퍼에 남아있는 데이터를 출력 스트림에 추가

bw.close();             // 버퍼를 닫는다

- 위와 같은 용도로 사용한다
- 마찬가지로 반드시 close를 사용해야한다

try(BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)) && ){
   bw.write("sss");
   bw.newLine();
   bw.write("ddd");
}catch (IOException e){
    e.printStackTrace();
}

- BufferedReader나 BufferedWriter 둘다 trycatch를 사용하면 close 문구를 사용안해도 괜찮아진다

한줄에 띄어쓰기를 포함한 여러 문자를 추가하고 단어하나씩 사용하기

- 문자열 하나에 여러 단어가 쓰여있고 내용을 구분하고 싶을때 사용하려면 어떻게 해야 할까?
그것을 위한 클래스가 하나 있다 바로 StringTokenizer이라는 클래스다

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		// 선언 및 입력
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
		// nextToken을 통한 출력
        bw.write(st.nextToken());
        bw.write(st.nextToken());

        bw.flush();
        bw.close();
        br.close();
    }
}

실행결과

Hello Java를 입력하면 공백이 기준이 되어 Hello와 Java가 출력되는 것을 확인할 수 있다

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

[JAVA] 연산자  (0) 2025.03.28
[JAVA] 변수  (0) 2025.03.28
[JAVA] 문제풀이 : 가위바위보  (1) 2025.03.26
[JAVA] 문제풀이 : 단어 퀴즈 만들기  (0) 2025.03.26
[JAVA] 문제풀이 : 자판기 만들기  (0) 2025.03.26