본문 바로가기
Develop/Java

[Java] BufferedReader, BufferedWriter

by 연로그 2021. 10. 4.
반응형

프로그래머스 코테는 파라미터를 알아서 넘겨 받도록 되어있는데.. 백준은 직접 입력 받아야했다.

Scanner와 sysout을 쓰다가 속도가 너무 느리게 나와서 BufferedReader/Writer에 대해 알아보려고 한다.

 


목차

1. BufferedReader

2. BufferedWriter

3. 주요 메소드

4. 예제

 


 

 

1. BufferedReader

문자 입력 스트림에서 텍스트를 효율적으로 읽을 수 있도록 문자를 버퍼링

엔터를 통해서만 입력받을 수 있어 ' ' 공백을 이용한 입력받기를 원한다면 StringTokenizer와 함께 사용

 

 

2. BufferedWriter

System.out.println()을 대신해 사용하곤 한다.

 

 

3. 주요 메소드

메소드명   기능
 BufferedReader(Reader rd)  rd에 연결되는 문자입력 버퍼스트림 생성
 BufferedWriter(Writer wt)   wt에 연결되는 문자출력 버퍼스트림 생성​
 int read()  스트림으로부터 한 문자를 읽어서 int 형으로 리턴
 int read(char[] buf)  문자배열 buf의 크기만큼 문자를 읽어들임.  읽어들인 문자 수를 리턴
 int read(char[] buf, int offset, int length)  buf의 offset위치에서부터 length 길이만큼 문자를 스트림으로부터 읽어들임​
 String readLine()  스트림으로부터 한 줄을 읽어 문자열로 리턴​​
 void mark()   현재우치를 마킹, 차 후 reset() 을 이용하여 마킹위치부터 시작함
 void reset()   마킹이 있으면 그 위치에서부터 다시시각, 그렇지 않으면 처음부터 다시시작
 long skip(int n)  n 개의 문자를 건너 뜀
 void close()  스트림 닫음
 void write(int c)  int 형으로 문자 데이터를 출력문자스트림으로 출력
 void write(String s, int offset, int length)  문자열 s를 offset 위치부터 length 길이만큼을 출력스트림으로 출력
 void write(char[] buf, int offset, int length)  문자배열 buf의 offset 위치부터 length 길이만큼을 출력스트림으로 출력​​​
 void newLine()  줄바꿈 문자열 출력
 void flush()   남아있는 데이터를 모두 출력시킴.

 

 

4. 예제

먼저 BufferedReader, InputStreamReader를 사용하기 위해 아래를 import 시켜야한다.

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

 

BufferedReader/BufferedWriter를 사용하는 메소드에서 try-catch 또는 throws를 이용한 예외처리도 해주어야 한다.

( IOException: 입출력 오류 발생 )

public static void main(String[] arg) throws IOException {
	...
}

 

BufferedReader

String만 받을 수 있기 때문에 형변환은 별도로 해줘야 한다.

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();

// 공백으로 구분하기
StringTokenizer st = new StringTokenizer(s);
String s1 = st.nextToken();
String s2 = st.nextToken();

 

🔻 다양한 형변환

더보기

문자열 👉 숫자

Integer.parseInt(str);    // string to int
Float.parseFloat(str);    // string to float
Double.parseDouble(str);  // string to double
Byte.parseByte(str);      // string to byte
Long.parseLong(str);      // string to long
Short.parseShort(str);    // string to short

 

숫자 👉 문자열

Integer.toString(int);
String.valueOf(long);
String.valueOf(double);
String.valueOf(float);
String.valueOf(boolean);
String.valueOf(char);
String.valueOf(char[]);

 

 

🔻 split()과 StringTokenizer 

더보기

split()과 StringTokenizer은 문자열을 구분자로 자르기 위해 사용한다.

둘의 차이점은 아래 예시와 함께 살펴보자.

 

split()

String str = "a,b,c";
String[] arr = str.split(","); // ,를 기준으로 {"a","b","c"}로 분리됨

 

StringTokenizer

String str = "a,b,c"
StringTokenizer st = new StringTokenizer(str, ",");
String a = st.nextToken();
String b = st.nextToken();
String c = st.nextToken();

 

위 예제만 살펴보면 동일한 방식으로 쪼개는 것처럼 보인다.

아래 예제를 보면 둘의 차이를 확실히 알 수 있을 것이다.

String str = "a*#b*c#d";

// split
String[] arr1 = str.split("*#"); // {"a", "b*c#d"}
for(String a: arr1) {
	System.out.println(a);
}

// StringTokenizer
StringTokenizer st = new StringTokenizer(str,"*#"); // "a", "b", "c", "d"
while(st.hasMoreTokens()){
	System.out.println(st.nextToken());
}

 

BufferedWriter

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("test!\n");

System.out.println()과는 달리 줄바꿈 처리가 자동으로 되지 않으니 \n을 이용해야 한다.

 


참조

  1. BufferedReader - 공식문서
  2. BufferedReader와 BufferedWriter - 코딩팩토리
  3. split과 StringTokenizer 예제 - REAKWON
  4. BufferedWriter - 공식문서

 

 

반응형