julia coding story

JAVA의 효율적인 입출력(BufferedReader, BufferedWriter,StringToken, readline) 본문

소프트웨어/Algorithm

JAVA의 효율적인 입출력(BufferedReader, BufferedWriter,StringToken, readline)

julia-biolat 2022. 1. 2. 16:04
728x90

1. BufferedReader (vs Scanner)

- 버퍼를 이용해서 읽는 함수 

- 입출력이 효율적으로 좋아짐(vs Scanner에 비해 상대적으로 빠름)

( 하드디스크는 원래 속도가 엄청 느리고 키보드나 모니터와 같은 외부장치와 데이터 입출력은 생각보다 시간이 걸리는 작입이다. 버퍼링 없이 키보드가 눌릴때마다 눌린 문자의 정보를 목적지로 바로 이동시키는 것보다 중간에 메모리 버퍼를 둬서 데이터를 한데 묶어서 이동시키는 것이 보다 효율적이고 빠르다.)

- 엔터만 경계로 인식하고 받은 데이터가 String으로 고정된다. (vs Scanner: 띄어쓰기, 엔터를 경계로 값 인식)

- integer.parseInt() 형변환을 통해 사용

 

 

  • BufferedReader 사용방법
import java.io.BufferedReader; //불러오기
import java.io.InputStreamReader;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 

2. BufferedWriter

- 버퍼를 이용해서 쓰는 함수

- System.out.print("");와 동일하게 사용가능한 함수

- but System.out.println()처럼 함수가 문자열 출력과 개행을 동시에 해주지 않음

- 입출력이 효율적으로 좋아짐

 

  • BufferedWriter 사용방법
import java.io.BufferedWriter; //불러오기
import java.io.OutputStreamReader;

BufferedWriter bw = new BuggerWriter(new OutputStreamWriter(System.out));

 

3. StringTokenizer

- String 클래스에서 split()함수가 문자열을 쪼개 배열에 저장해주는 함수였다면, StringTokenizer 클래스는 보다 간단하게 문자열을 토큰 단위로 나눠주는 함수

- BufferedReader를 잘라서 배열과 같이 인덱스를 사용하여 접근하여 사용한다.

- 공백이 있다면 뒤에 문자열이 공백 자리를 땡겨 채우도록 한다.

- BufferedRedaer보다 빠르게 사용될 수 있다.

- split()보다 빠르다.

- 정규식이나 인덱스 접근과 같은 처리가 필요없다면 StringTokenizer를 사용하는것이 효율적이다. 

 

  • StringTokenizer 사용방법
    import java.util.StringTokenizer;//불러오기
    
    String s = "2022년 1월 1일부터 코딩 ㅋ";
    StringTokenizer tokenizer = new StringTokenizer(s); //공백을 기준으로 문자열 s를 나누기 위한 객체
  • 메소드
    int countTokens()  //남아있는 토큰의 개수를 반환함
    boolean hasMoreTokens()  //남아있는 토큰이 있으면 true, 더 이상 토큰이 없으면 false
    String nextToken()  // 토큰을 꺼내옴
  • 실행
import java.util.StringTokenizer;
import java.io.BufferedReader;

public class StringTokenizerTest{
	public static void main(String[] args){
    	BufferedReader br = new BufferReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readline()); 
        //readline()는 값을 읽어올 때, String값으로 개행문자를 포함해 한줄을 전부 읽어오는 방식이다.
        
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
    }
}

4. StringBuilder

준비중....