ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BufferedReader/Writer
    알고리즘(자바) 2022. 6. 14. 02:25

    입출력 방식을 빠르게 하기 위해서 사용한다.

    BufferedReader 은 Scanner와

    BufferedWriter 은 System.out.println()와 

    유사하다.

    이렇게 둘은 속도 측면에서 훨씬 빠르지만, 받은 데이터를 가공하는 작업이 필요한 경우가 많다.

    사용하려면

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;

    이들을 import해줘야한다. 또는 ctrl + shift + o 를 누르면 이클립스에서 제공해주긴 한다.

     

    BufferedReader을 먼저 알아보자.

    그러기 위해서, readLine()을 알아보자. readline은 한 줄만 읽는 함수인데,

    5

    1,2,3,4,5 가 있으면 readLine으로 읽을 떄, 5는 5를 읽고 Integer.parseInt()로 int타입으로 바꾸면 되는데,

    두번째 줄은 readLine으로 읽고, StringTokenizer나 split을 통해 각각 따로 읽고 배열에 집어넣게 된다.

    그래서 보면,

    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
    String s = bf.readLine(); //String
    int i = Integer.parseInt(bf.readLine()); //Int

    먼저 인스턴스를 만들고, String은 bf.readline을 하면되고, int는 Integer.parseInt()를 해주면 되는데, 배열같이 예외처리를 해주려면 throws IOException를 이용해준다. throw를 사용하려면

    import java.io.IOException; 
    
    public static void main(String[] args) throws IOException {
    
    }

    import를 해주고, main에 throws IOException를 붙여준다. 그리고

    import java.util.StringTokenizer;
    
    StringTokenizer st = new StringTokenizer(s); //s라는 문자열을 넣음
    //StringTokenizer st = null이렇게 객체선언 가능
    int a = Integer.parseInt(st.nextToken()); //첫번째 호출
    int b = Integer.parseInt(st.nextToken()); //두번째 호출

    이렇게 StringTokenizer변수 st에 문자열 s="a b c d"가 들어가면 a,b,c,d이렇게 나눠서 들어가게 된다.

    기본적으로 구분자 집합이 토큰으로 처리되지 않기 때문인데,

    여기서, nextToken()을 이용해 st.nextToken을 하면 토큰을 하나하나 불러오게 된다.

     

    그리고 StringTokenizer로 구분자를 추가할 수 있는데,

    String str = "a b c d e f g";
    		
    StringTokenizer st = new StringTokenizer(str, "ac ");

    이렇게 하면, 공백문자를 제외하고도 ac가 제외된다. 그래서 결과값은 b d e f g가 된다.

     

     

     

    String array[] = s.split(" ");

    split를 이용해 공백단위로 끊어서 데이터를 넣고 사용하는 방식이다.

     

    이제,BufferedWriter 을 알아보자.

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    //할당된 버퍼에 값 넣어주기
    String s = "abcdefg";   //출력할 문자열
    bw.write(s+"\n");   //버퍼에 있는 값 전부 출력
    bw.flush();   //남아있는 데이터를 모두 출력시킴
    bw.close();   //스트림을 닫음

    위처럼 버퍼에 값을 넣어주고, write로 출력해주고 flush, close로 뒤처리를 해주면 된다.

    여기서 bw.write는 자동개행기능이 없어서 \n으로 처리해주면 된다.

     

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.IOException; 
    import java.util.StringTokenizer;
    public class HelloJava {
        
    	public static void main(String[] args) throws IOException {
    	    
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            
            int a = Integer.parseInt(bf.readLine());
            StringTokenizer st;
            for (int i = 1 ; i < a+1; i++) {
            	
                st = new StringTokenizer(bf.readLine()," ");
                bw.write(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n");
            }
            
            bw.flush();
            bw.close();
            
        }
    }

    이해를 위해 위 코드를 리뷰해보면

    먼저 입력을 받아서 그만큼 반복해주게 짠 다음, StringTokenizer st; 로 st변수를 만들고,

    반복문 안에서 변수st에 bf.readLine()으로 값을 받는데, " "로 띄어쓰기를 제거해주겠다 하면된다. 근데 기본으로 공백은 제거해주므로 안 적어도 상관없다. 2개의 값을 적던 3개의 값을 적던 적은거의 1번째 2번째 를 더해주는 코드가 된다.

    '알고리즘(자바)' 카테고리의 다른 글

    출력  (0) 2022.06.03
    값 입력받기  (0) 2022.05.11

    댓글

Designed by Tistory.