스테코더
BufferedReader & BufferedWriter 본문
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