JAVA - java.io 패키지

TopOfTheHead·2025년 8월 18일

자바 ( JAVA )

목록 보기
5/23

java.io
Java에서 I/O를 수행하기위한 Class를 포함하는 패키지
파일 등과 같은 외부로부터의 데이터 송수신을 담당

InputStream : java.io.InputStream
Java가 외부로부터 입력된 데이터를 받을 수 있도록 입력통로를 구현하는 Class

。외부에서 입력된 데이터Byte 단위의 InputStream으로 받아온다.

  • InputStream 종류
    • System.in
      。키보드와 연결된 standard input stream
      키보드 입력Byte 단위로 읽어서 InputStream 객체 생성

      InputStream is = System.in;

    • new File("파일명")
      。외부파일을 Java로 읽어오기위한 standard input stream
    Scanner scanner = new Scanner(new File("data.txt"));
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        System.out.println(line);
    }
    scanner.close();

InputStreamReader : java.io.InputStreamReader
InputStream객체InputStreamReader객체로 변환하는 브리지 클래스
Byte 단위InputStream객체String 단위로 읽을 수 있도록 변환

  • InputStreamReader 생성
InputStreamReader isr = new InputStreamReader(System.in);

키보드로 입력되어 생성된 Byte 단위의 InputStream객체생성자로 전달하여 InputStramReader 객체로 생성

BufferedReader : java.io.BufferedReader
Buffer를 활용하여 입력되는 값의 Read를 수행하는 함수

。입력받는 데이터는 String으로 고정됨

키보드에서 입력이 발생한 즉시 한 문자씩 Buffer로 전송
Buffer가 가득차거나 개행문자( ex . \n )을 접하면 그전까지 Buffer의 내용을 한번에 전달.
Buffer를 사용하지 않는 경우 키보드의 키를 누르는 즉시 전달됨.

Buffer를 사용하므로 사용 후 반드시 br객체.close()를 수행

  • java.util.Scanner와 차이
    Scanner의 경우 띄어쓰기개행문자를 경계로 하여 입력값을 인식
    BufferedReader는 오직 개행문자를 경계로 인식

    Scanner의 경우 스캐너객체.nextInt()등을 통해 다양한 type의 입력값을 받을 수 있다.
    BufferedReaderBufferedReader객체.readlLine()을 통해 오직 String만 입력받을 수 있다.
    int를 받을 경우 Interger.parseInt()로 형변환 수행

    。입력값이 많으면 BufferReader가 유리하며 처리속도가 더 빠르다.
    ScannerBuffer Size = 1024 char
    BufferedReaderBuffer Size = 8192 char

  • BufferedReader객체 생성
    。보통 InputStreamReader객체생성자로 전달하여 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
  • BufferedReader객체.readLine()
    키보드에서 입력하여 Buffer에 저장된 내용을 String으로 수신
    ▶ 입력 시 java.io.IOException;throws IOExceptionmethod에 선언
public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in) );
        String s = br.readLine();
		int i = Integer.parseInt(br.readLine()); // 정수형 변환
	}
  • BufferedReader 데이터 가공
    BufferedReader로 입력된 데이터는 개행문자 단위로 분할되므로, Scanner처럼 공백 단위로 가공 시 StringTokenizer 또는 String.split() 사용

BufferedWriter : java.io.BufferedWriter
Buffer를 활용하여 출력을 수행하는 Class
System.out.println();와 달리 많은 양의 출력이 필요한 경우 사용

System.out.println();와 달리 출력개행을 동시에 수행하지 않으므로, bw.write("문자열" + "\n") 또는 bw객체.newLine()을 통해 개행을 수행해야한다.

Buffer를 사용하므로 사용 후 반드시 bw.flush() 수행 후 bw객체.close() 수행

  • BufferedWriter객체 생성
    。보통 OutputStreamWriter객체생성자로 전달하여 생성
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

BufferedWriter method

  • bw객체.close()
    BufferedWriter이 사용하는 Stream을 종료
    close()를 선언하기 전에 flush()가 선행되어야한다.

  • bw객체.flush()
    BufferedWriter이 사용하는 Buffer 내 저장된 모든 문자열을 출력 및 비우는 역할을 수행

    Buffer가 가득찬 경우 자동으로 수행됨.

  • bw객체.newLine()
    개행 역할을 수행( \n )

  • bw객체.write(문자열)
    Buffer에 출력할 데이터를 작성

Serializable 인터페이스 : java.io.Serializable
객체직렬화(Selialization)하는 용도의 인터페이스
▶ 해당 인터페이스를 상속하여 네트워크를 통해 객체를 전송하거나 ( Web API ) , 객체파일이나 DB에 저장 시 활용

。해당 인터페이스에는 객체이진데이터( ByteStream )으로 직렬화하거나 역직렬화하는 기능을 정의

Byte Stream : 데이터Byte 단위로 input , output 할 수 있는 Stream 객체

  • 직렬화 (Serialization) :
    객체Byte Stream으로 변환하여 파일에 저장하거나 네트워크를 통해 전송할 수 있도록 하는 과정

  • 역직렬화 ( Deserialization ) :
    Byte Stream객체로 변환하는 과정.
profile
공부기록 블로그

0개의 댓글