Back-end/Java Language

0. BufferedReader, BufferedWriter, Scanner, StirngTockenizer

prden 2021. 7. 3. 12:04

1. 버퍼

버퍼란 특정 데이터를 한 곳에서 다른 곳으로 전송할 때 일시적으로 그 데이터를 보관하는 임시 메모리 영역이다. 

입출력 속도를 향상하기 위해서 버퍼를 사용한다. 

- 버퍼를 이용한 입력 : BufferedReader

- 버퍼를 이용한 출력 : BufferedWriter

- 버퍼 Flush : 버퍼에 남아있는 데이터를 출력시키는 작업

 

2. BufferedReader

1) Scanner와 차이 

 Scanner는 띄어쓰기, 엔터 등을 경곗값으로 인식해서 따로 가공할 필요가 없어 사용하기에 편리하다.

그러나 BufferedReader는 엔터만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 데이터를 따로 가공해야 하는 경우가 많다. 

그 대신 BufferedReader가 빠르다. (알고리즘 문제 풀 때 이것을 많이 사용하는 이유)

 

2) BufferedReader의 사용방법

readLine()을 사용하여 데이터를 라인 단위로 읽어옴. 리턴 값이 String이기 때문에 다른 타입으로 입력받으려면 형 변환 필요하다. 

int num = Integer.parseInt(br.readLine());

아래는 사용 예시이다. 

//콘솔에서 입력 받을 경우
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

//리턴값이 String 따라서 형변환 필수
int num = Integer.parseInt(br.readLine());

//입출력 끝난 후 닫아주기 
br.close();

 

3. BufferedWriter

System.out.print("");과 동일하게 사용가능한 함수로 BufferedWriter함수 또한 버퍼를 이용하기 때문에 성능면에서 우수하다. 

많은 양의 출력이 필요할 때 사용가능하다. 

BufferedWriter bw = new BufferedWriter(new FileWriter("bufferedWriter.txt"));
bw.write("hello\n"); // 출력
bw.newLine(); //개행하는 역할
bw.flush(); 남아있는 데이터를 모두 출력
bw.close();

4. StirngTockenizer

우리가 지정하는 문자열을 쪼개주는 클래스이다. 이렇게 쪼개진 문자열을 Tocken이라고 부른다. 

1) String의 split을 사용하는 경우

String []tokens=str.split(" ");
		
	for(int i=0;i<tokens.length;i++){
		System.out.println(tokens[i]);
	}

 

2) StringTockenizer의 delim을 사용하는 경우

public static void main(String[] ar){
	String str="this string\tincludes\ndefault delims";
	StringTokenizer stk=new StringTokenizer(str);
	System.out.println(str);
	System.out.println();
		
	System.out.println("total tokens:"+stk.countTokens());
	System.out.println("================tokens==================");
	while(stk.hasMoreTokens()){
		System.out.println(stk.nextToken());
	}
	System.out.println("total tokens:"+stk.countTokens());
}

while문에서 토큰이 있는지 확인한 후 토큰이 있을 경우 가져온다.  토큰을 하나씩 가져오면서 소비하게 된다. 

마지막에는 total tockens=0이다. 

'Back-end > Java Language' 카테고리의 다른 글

Scanner  (0) 2021.07.05
0. StringBuilder vs. StringBuffer  (0) 2021.07.04
X. GarbageCollection(가비지 컬렉션)  (0) 2021.06.10
입출력(I/O)  (0) 2021.06.07
private static final Logger LOGGER = LoggerFactory.getLogger(this.class);  (0) 2021.06.05