Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Archives
Today
Total
관리 메뉴

스테코더

BufferedReader & BufferedWriter 본문

Algorithm/THEORY

BufferedReader & BufferedWriter

print("스테코더") 2022. 11. 17. 19:39

BufferedReader & BufferedWriter

BufferedReader & BufferedWriter은 이름처럼 버퍼를 사용하여 읽고 쓰는 함수이다. 이 함수는 버퍼를 사용하기 때문에 이를 이용하면 입출력의 효율을 향상시킬 수 있다.

 

📝풀어볼 문제


BufferedReader

⚠️ Scanner은 띄어쓰기(스페이스)와 엔터(개행문자)를 경계로 입력 값을 인식하기 때문에 따로 가공할 필요가 없어 사용하기 편리함.

BufferedReader엔터만 경계로 인식하고 String으로 데이터가 고정 됨!

사용 방법

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

public class Main {
    public static void main(String[] args) throws IOException {
        // throws IOException 필수!! 또는 예외처리 해야함
        
        // 콘솔에서 입력 받을 경우
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 파일에서 입력 받을 경우
        FileReader fr=  new FileReader("BufferedReaderEx1.java"); // "읽어드릴 파일 이름"
        BufferedReader br_f = new BufferedReader(fr);
        
        // String이 리턴값이라 형변환 필수!! 라인 단위
        int num = Integer.parseInt(br.readLine());
        br.close(); // 입출력 끝난 후 닫기 필수

        // 파일의 한 줄 한 줄 읽어서 출력
        String line = "";
        for (int i = 0; (line = br_f.readLine()) != null; i++) {
            System.out.println(line);
        }
    }
}

✔️ 공백을 포함하지 않는 Int형

  • BufferedReader를 통해 선언 → readLine() 메소드를 통해 String으로 입력받음
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String s = br.readLine();
    int n = Integer.parseInt(br.readLine());
    
  • → Integer.parseInt() 메소드로 형변환

✔️ 공백을 포함하는 Int형

  • 방법 1. StringTokenizer 사용 (Default값 = “”)
    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());
    
    			int a = Integer.parseInt(st.nextToken());
    			int b = Integer.parseInt(st.nextToken());
    			int c = Integer.parseInt(st.nextToken());
    
    			System.out.println("a의 값 : " + a + "b의 값 : " + b + "c의 값 : " + c);
    				
    			// 배열에서의 사용
    			String s1 = br.readLine();
    			StringTokenizer st1 = new StringTokenizer(s1);
    				
    			for (int i = 0; i < arr.length; i++) {
    				arr[i] = Long.parseLong(st1.nextToken());
    			}
    
    			br.close();
        }
    }
  • 방법 2. String.split() 메소드 이용
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    String s = br.readLine();
    String arr[] = s.split(" ");
    
    int a = Integer.parseInt(arr[0]);
    int b = Integer.parseInt(arr[1]);

BufferedReader의 또 다른 메소드

Modifier and Type Method and Description

void close() 입력 스트림을 닫고 사용하던 자원들을 풂
void mark(int, readAheadLimit) 스트림의 현재 위치 마킹
boolean markSupported() 스트림이 mark 기능을 지원하는지 true/false로 알려줌
int read() 한 글자만 읽어 정수형으로 반환해줌, 즉 3을 ‘3’으로 읽어서 ‘3’의 정수형인 51을 반환(3을 리턴하지X)
int read(char[] cbuf, int offset, int length) cbuf의 offset의 위치부터 length 길이만큼 문자를 스트림으로 읽어옴
String readLine() 한줄을 읽어 String으로 반환
boolean ready() 입력 스트림이 사용할 준비가 되어있는 지 확인
void reset() 마킹이 있으면 그 위치부터 다시 시작, 그렇지 않으면 처음부터 다시 시작
long skip(long n) n개의 문자를 건너뜀

BufferedWriter

⚠️ System.out.println 처럼 문자열 출력과 개행을 동시에 해주지 않기 때문에 write에 ***“/n”***을 넣거나 newLine 함수를 사용해야함!!

사용 방법

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter("bufferedWriter.txt"));
        bw.write("hello\\n"); // 출력
        bw.newLine(); // 개행, 즉 엔터 역할
        bw.write("I am writing\\n"); // 개행과 함께 출력
        bw.flush(); // 남아 있는 데이터를 모두 출력
        bw.close(); // 스트림 닫음
}
  • 버퍼를 사용하기 때문에 다 쓴 뒤 버퍼를 클린하게 해줘야함
  • → flush() 함수를 사용하여 버퍼에 남아있는 데이터를 출력해 없앤 후 스트림을 닫아줌

BufferedWriter의 또 다른 메소드

Modifier and Type Method and Description

void close() 스트림을 닫음, 닫기 전 flushing
void flush() 스트림을 비움
void newLine() 개행 역할을 함
void write(char[] cbuf, int offset, int length) 버퍼 offset 위치부터 length 크기만큼 write
void write(int c) 한 글자 쓰기
void write(String s, int offset, int length) 문자열에서 offset부터 일정 길이만큼 wrtie

'Algorithm > THEORY' 카테고리의 다른 글

DFS 깊이 우선 탐색  (0) 2022.11.19
Comments