I/O

김주영·2023년 1월 21일
0

자바 <면접>

목록 보기
9/9

🌱 BufferedReader 와 Bufferedwriter


둘은 모두 기존에 쓰던 scanner와 System.out.println()보다 속도 측면에서 훨씬 빠르기 때문에

(입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성을 높임)

많은 양의 데이터를 처리할 때 유리하다.

하지만 그에 비해 BufferdReader은 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 가공하는 작업이 필요한 경우가 많다.

사용법에 앞서 이 둘을 사용하려면 다음의 import가 추가적으로 필요하다.

🌿 BufferedReader 사용법

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

주의할 점
1. readLine()시 리턴값을 String으로 고정되기에 String이 아닌 다른타입으로 입력을 받을려면 형변환을 꼭 해주어야한다는 점이다.
2. 예외처리를 꼭 해주어야한다는 점이다. readLine을 할때마다 try & catch를 활용하여 예외처리를 해주어도 되지만 대개 throws IOException을 통하여 작업한다.

📌 공백 단위 입력

Read한 데이터는 Line 단위로만 입력받기 때문에 데이터 가공 필요

StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출

String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
  1. StringTokenizer
  2. spring(" ")

🌿 Bufferedwriter 사용법

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

BufferedWriter 의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close() 를 반드시 호출해 주어 뒤처리를 해주어야 한다.

그리고 bw.write에는 System.out.println();과 같이 자동개행기능이 없기때문에 개행을 해주어야할 경우에는 \n를 통해 따로 처리해주어야 한다.

ref : https://m.blog.naver.com/ka28/221850826909

🌱 StringTokenizer


특정 문자에 따라 문자열을 나누고 싶을 때 사용하는 클래스

  • 형태
StringTokenizer st = new StringTokenizer(); //공백 기준
StringTokenizer st = new StringTokenizer(문자열, 구분자); //구분자 기준
StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false); //구분자 기준 (true : 구분자 포함, false : 구분자 포함x)

"-:"과 같은 여러 문자로 구분 가능

  • split()과 비교

    • SringTokenizer는 java.util에 포함되어 있는 클래스, split는 String 클래스에 속해 있는 메소드
    • SringTokenizer는 문자 또는 문자열을 구분한다면, split는 정규표현식으로 구분
    • SringTokenizer는 빈 문자열을 토큰으로 인식x, split는 빈 문자열을 토큰으로 인식
    • SringTokenizer는 결과값이 문자열, split는 결과 값이 문자열 배열. 따라서 SringTokenizer를 이용할 경우, 전체 토큰을 보고 싶다면 반복문을 이용해서 하나씩 뽑아야 함
    • 배열에 담아 반환하는 split는 데이터를 바로 잘라서 반환해주는 SringTokenizer보다 성능이 약간 뒤쳐지지만 데이터 양이 많은 경우 큰 차이 없음

ref : https://jhnyang.tistory.com/398

🌱 DataInputStream과 DataOutputStream


DataInput 인터페이스 <- DataInputStream 구현
DataOutput 인터페이스 <- DataOutputStream 구현

데이터를 읽고 쓰는데 있어서 byte 단위가 아닌, 8가지 기본 자료형의 단위로 읽고 쓸 수 있다는 장점

DataOutputStream이 출력하는 형식은 각 기본 자료형 값을 16진수로 표현하여 저장한다.

ex) 10 → 0, 0, 0, 0a / true → 01

ref : https://colinch4.github.io/2020-11-30/%EC%9E%85%EC%B6%9C%EB%A0%A5(2)-%EB%B0%94%EC%9D%B4%ED%8A%B8-%EA%B8%B0%EB%B0%98-%EC%8A%A4%ED%8A%B8%EB%A6%BC/

ref : https://zoiworld.tistory.com/615

0개의 댓글