보통 자바를 사용할 때 입력은 Scanner, 출력은 System.out.println()을 많이 사용한다.
이것들은 사용하기 매우 쉽지만, 느리다는 단점이 있다.
코딩테스트 같이 빠른 속도를 요구하는 작업에서는 BufferedReader와 BufferedWriter를 사용하는 것이 좋다.
가운데 버퍼를 두고 사용하는게 더 느리지 않나? 라는 생각이 들겠지만
키보드를 누를 때 마다 프로그램으로 전송되는 거 보다
가운데 버퍼에 모아두고 프로그램으로 한 번에 전송하는 것이 더 빠르다.
💚 BufferedReader
Scanner와 달리 개행문자만 경계로 인식, 데이터가 String으로 고정 → 가공 필요
- 사용법
import java.io.BufferedReader;
import java.io.InputStreamReader;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine(); // String으로 받아야함
int i = Integer.parseInt(br.readLine()); // 다른 데이터타입으로 원할시 가공
예외처리 필수. try catch문을 사용하거나 throws IOException 처리하기.
- 중요 메서드들
반환형 | 함수명 | 기능 |
String | readLine() | 한 줄 읽기 |
void | close() | 입력 스트림 닫기 |
int | read() | 한 글자만 읽어 정수로 반환(아스키코드) |
💚 StringTokenizer
BufferedReader(개행문자로 구분)를 통해 읽어온 데이터(String)을 공백 단위로 가공해야 할 때 사용
- 사용법
import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // nextToken을 사용하여 순서대로 호출
int M = Integer.parseInt(st.nextToken());
💚 BufferedWriter
System.out.println()과 달리 개행을 해주지 않아서 newLine() 메서드를 사용해 주거나, write()메서드 안에서 "\n" 사용
반드시 사용후 flush()와 close()사용.
- 사용법
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = "Hello";
bw.write(s);
bw.newLine();
bw.flush(); // 남아있는 데이터 모두 출력
bw.close();
- 중요 메서드들
반환형 | 함수명 | 기능 |
void | close() | 스트림 닫기 |
void | flush() | 스트림 비우기. 닫기 전 실행 |
void | newLine() | 개행 |
void | write(String s, int offset, int length) | offset부터 length만큼 문자열 작성 문자열만 단독으로 넣어줘도 가능 버퍼에 작성한다는 의미. |
백준 1000번 문제(A + B)를
버퍼 입/출력을 사용했을 때,(위)
Scanner와 System.out.println()을 사용했을 때(아래)
속도 차이
- 코드
import java.io.*;
import java.util.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 = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
bw.write(String.valueOf(a + b));
// bw.write(a + b + "\n"); // 이것도 정답처리
br.close();
bw.flush();
bw.close();
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1 = sc.nextInt();
int n2 = sc.nextInt();
System.out.println(n1 + n2);
}
}
'Programming > Java' 카테고리의 다른 글
[Java] 자바 ArrayList 클래스 (0) | 2023.01.04 |
---|---|
[Java] 자바 Stack(스택) 클래스 (0) | 2022.12.19 |
[Java] 문자열 관련 메서드 - charAt(), length() (0) | 2022.12.16 |
[Java] 자바 자주쓰는 형 변환 (0) | 2022.11.29 |
[Java] Scanner 클래스 (0) | 2022.08.30 |
댓글