BufferedReader와 Bufferedwrite

건미누·2023년 4월 1일
1

자바

목록 보기
1/2
post-thumbnail

BufferedReader의 기능

✔️ Scanner와 유사

✔️ Import가 추가적으로 필요

Bufferedwrite의 기능

✔️ System.out.print와 유사

✔️ Import가 추가적으로 필요

두 기능의 사용 이유

✔️ 기존의 쓰던 Scanner와 System.out.print보다 속도 측면에서 훨씬 빠르다

➖ 입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성을 높임

➖ 많은 양의 데이터를 처리하는데 용이함

❗ BufferedReader은 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 가공하는 작업이 필요한 경우가 많다

BufferedReader 사용법

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

public static void selectActivity(ArrayList<Activity> list) throws IOException {

        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
        String s = bf.readLine(); // String
        int i = Integer.parseInt(bf.readLine()); // Int
  1. 입력은 readLine(); 메서드를 활용한다.
    1. readLine(); 사용 시 리턴 값은 String으로 고정되기에 String이 아닌 다른 타입으로 입력 받으려면 형변환을 해야한다.
    2. 예외처리를 꼭 해주어야한다. 할 때 마다 try & catch를 활용하여 예외처리를 해주어도 되지만 대부분 throws IOException을 통하여 작업한다.

공백 단위로 데이터를 가공하기 위한 2가지 방법

StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출

String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음

Read한 데이터는 Line단위로만 나눠지기 때문에 공백 단위로 가공하려면 따로 작업을 해주어야한다.

  1. StringTokenizer

    StringTokenizer에 nextToken() 함수를 사용하여 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출할 수 있다.

    → BufferedReader 클래스가 아니더라도 ,(컴마)로 구분되는 문자열들을 분리하는 등 특정문자에

    따라 문자열을 나누고 싶을 때 사용 가능

    1. StringTokenizer st = new StringTokenizer(문자열);
     -> 띄어쓰기 기준으로 문자열을 분리
    
    2. StringTokenizer st = new StringTokenizer(문자열, 구분자);
     -> 구분자를 기준으로 문자열을 분리
    
    3. StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);
     -> 구분자를 기준으로 문자열을 분리할 때
    		true = 구분자도 토큰에 포함
    		false = 구분자는 분리된 문자열 토큰에 미포함
    		default = false
  2. .split(” “)

    split() - 괄호 안에 구분자를 입력하여 구분자를 기준으로 문자열을 분리

StringTokenizer와 Split 차이

  1. StringTokenizer은 java.util에 포함되어 있는 클래스, split은 String 클래스에 속해있는 메소드

  2. StringTokenizer은 문자, 문자열로 구분한다면, split은 정규표현식으로 구분한다

  3. StringTokenizer은 빈 문자열을 토큰으로 인식하지 않지만 split은 인식한다

  4. StringTokenizer은 결과 값이 문자열이라면 split은 결과 값이 문자열 배열이다.

    → StringTokenizer 이용 시, 전체 토큰을 보려면 반복문을 이용해 하나하나 뽑아야 함

Bufferedwriter 사용법

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 
//할당된 버퍼에 값 넣어주기
String s = "abcdefg";   //출력할 문자열
bw.write(s+"\n");   //버퍼에 있는 값 전부 출력
bw.flush();   //남아있는 데이터를 모두 출력시킴
bw.close();   //스트림을 닫음

✔️ Bufferedwriter의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close()를 호출해야한다.

✔️ Bufferedwriter는 정수 출력이 불가능 하다. 다음과 같이 String형으로 변환 후 출력해야한다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int num1 = Integer.parseInt(bf.readLine());
		
		bw.write(String.valueOf(num1 - 543));
		bw.flush();
		bw.close();
	}
}
profile
꺾여도 해야지

0개의 댓글