Buffer : 읽기,쓰기가 가능한 메모리 배열
- BufferedReader
: Scanner(기능이많음)와 같은 역할이지만 BufferedReader가 문자열에 최적화되었기 때문에 처리속도가 빠르다.
: Scanner는 space, enter 모두 경계를 갖지만 BufferedReader는 enter만 갖기 때문에 split()이나 StringTokenizer와 같은 추가 작업으로 space 구분을 할 수 있다.
: Scanner는 때마다 출력하지만, BufferedReader 메모리에 모아서 한번에 출력한다.(입력값이 많을 때 BufferedReader의 사용이 효율적)
- StringTokenizer : 공백 등과 같은 구분자가 있는 상황에서 이를 제거하고 뒤에 있는 문자열을 땡겨준다.
- BufferedWriter : System.out.print()와 같은 출력역할
<BufferedReader >
백준 8393 예제.
import java.io.BufferedReader; //import
import java.io.IOException; //import
import java.io.InputStreamReader; //import
public class ex03 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader sb = new BufferedReader(new InputStreamReader(System.in));
// BufferedReader의 입력 기본적으로 문자열을 받기 때문에 다른 타입원할시 '형변환'하기
// 1. readLine() 메소드 사용
int N = Integer.parseInt(sb.readLine());
// 2. 입력 받은 후 버터 닫는 메소드 close() 사용
sb.close();
int sum=0;
for(int i=1; i<=N; i++) sum+=i;
System.out.println(sum);
}
}
1. readLine() 메소드 사용
: 입력한 값을 줄 단위로 읽음
: 문자열이 리턴되기 때문에 다른 타입입력원할시 형변환 필수
: 예외처리 필수
2. 입력받은 후 버퍼 닫는 메소드 close() 사용 : BufferedReader사용으로 열린 메모리가 새지 않게 사용 후 닫기
<StringTokenizer>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Stringtokenizerr{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1.
StringTokenizer st = new StringTokenizer(br.readLine());
// 2.
while(st.hasMoreTokens()) { //—> 남아 있는 토큰이 있는지 여부
//3.
String token = st.nextToken();
System.out.println(token);
}
}
}
1. br.readLine()통해서 입력하면 StringTokenizer가 공백기준으로 줄 나눔
2. StringTokenizer 의 메소드 hasMoreTokens()는 boolean 반환으로 남아있는 토큰이 있으면 true를 반환 (=while문 작동)
3. StringTokenizer 의 메소드 nextToken()은 구분자를 통해 나눠진 문자열, 숫자의 한 덩어리?씩 반환함
<BufferedWriter >
- 백준예제 11022
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
// A+B = C
public class bufferedwriterr {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 출력버퍼
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 때마다 새 객체 생성해야하므로 초기화만 설정
StringTokenizer st;
// 더할 값 갯수 입력 위한 선언이며 숫자타입은 형변환 필수
int N = Integer.parseInt(br.readLine());
for(int i =1; i<=N; i++) {
// 더할 값 두개 입력
st = new StringTokenizer(br.readLine());
// st의 첫번째값 갖고 옴
int a = Integer.parseInt(st.nextToken());
// st의 두번째 값 갖고 옴
int b = Integer.parseInt(st.nextToken());
// 1. write() 메소드
bw.write("Case #"+i+": "+ a +" + "+ b + " = " +(a+b)+"\n");
}
// 2. 사용후 버퍼비우기
bw.flush();
// 3. 버퍼 닫기
bw.close();
}
}
1. write()
: 예외처리 필수
: 출력할 내용 담음
2. bw.flush() : 사용 후 버퍼를 비우기
3. bw.close() :버퍼 닫기
'JAVA' 카테고리의 다른 글
JAVA_입출력 (0) | 2021.11.04 |
---|---|
JAVA_람다식(Rambda expression) (0) | 2021.08.10 |
JAVA_Thread1 (0) | 2021.08.08 |
JAVA_제네릭, 열거형, 애너테이션 (0) | 2021.08.07 |
JAVA_컬렉션 프레임워크(Set, Map) (0) | 2021.08.06 |
댓글