버퍼를 이용해서 읽고 쓰는 함수
버퍼를 이용하는 입력은 키포드 입력이 있을 때마다 한 문자씩 버퍼로 전송
버퍼가 가득 차거나, 개행문자가 나타나면 버퍼의 내용을 한 번에 전송
-> 중간에 메모리 버퍼를 둬서 데이터를 한 번에 묶어서 이동 시키는 게 효율적이고 빠름
vs. 버퍼를 사용하지 않는 입력 like Scanner
키보드 입력이 키를 누르는 즉시 바로 전달됨
키보드와 같은 외부 장치와의 데이터 입출력은 생각보다 시간이 많이 걸리는 작업
cf. 버퍼란?
데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 데이터를 보관하는 임시 메모리 영역
입출력 속도 향상을 위해 사용
버퍼 플러시란?
버퍼에 남아있는 데이터 출력시킴 (버퍼 비움)
일단 필요한 import는
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
버퍼를 이용한 입력
readLine()을 사용하면 데이터를 라인 단위로 읽을 수 있음
but 리턴 값이 String으로 고정되므로!!!!! 다른 타입으로 입력 받으려면 형변환 필수
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = bf.readLine(); //String
int i = Integer.parseInt(bf.readLine()); //Int (String-> int로 형변환 필수)
bf.close(); // 입출력 끝난 후 닫아줘야
BufferedReader 클래스로 입력 읽어들일 때 라인으로 읽어들일 수 밖에 없으므로 스페이스 기준으로 문자열 분리 원할 때 사용하는 클래스
즉, 하나의 문자열을 여러 개의 토큰으로 분리할 때 쓰는 클래스
라이브러리 임포트
import java.util.StringTokenizer;
1.StringTokenizer st = new StringTokenizer(문자열);
띄어쓰기 기준으로 문자열 분리
2.StringTokenizer st = new StringTokenizer(문자열, 구분자);
구분자 기준으로 문자열 분리
3.StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);
구분자 기준으로 분리 시 구분자를 토큰에 넣을지(true), 안 넣을지(false - 디폴트)
용례
import java.util.StringTokenizer;
public class main
{
public static void main(String[] args)
{
String str = "letsbebrave의 블로그는 velog에 있다";
StringTokenizer st = new StringTokenizer(str, " ");
System.out.println(st.nextToken());
System.out.println(st.nextToken());
System.out.println(st.nextToken());
System.out.println(st.nextToken());
}
}
결과
띄어쓰기 기준으로 문자열이 분리되어서 출력된 것을 볼 수 있다.
분리된 토큰을 확인하고 싶을 때는 nextToken()
을 이용해서 확인할 수 있다!
BufferedReader와 StringTokenizer를 이용한 용례
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
// import java.io.*; 라고 줄여서 선언해줘도 됨
import java.util.StringTokenizer;
// 공백 단위로 알기 위한 import
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 x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int h = Integer.parseInt(st.nextToken());
int x_min = Math.min(x, w-x); // x축 최소거리
int y_min = Math.min(y, h-y); // y축 최소거리
// x와 y축 최소거리 중 가장 작은 값
System.out.println(Math.min(x_min, y_min));
}
}
https://jhnyang.tistory.com/398
https://st-lab.tistory.com/86