3. JAVA - 파일 입출력

hsso_o·2024년 7월 12일
0

스터디

목록 보기
19/44

입출력(IO)

  • 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 연동을 위한 자바 라이브러리
  • 단방향 데이터 송수신을 위해 스트림을 활용해 데이터를 서로 주고 받음
  • 사용 이유
    • 사용자로부터 입력을 받거나 화면이나 스피커로 출력 가능
    • 영구적으로 데이터를 저장 가능

스트림

  • 입출력 장치에서 데이터를 읽고 쓰기 위한 단방향 통로로 자바에서 제공하는 클래스
  • 기본적으로 1바이트 단위의 데이터만 지나가게 되고 주고 받는 데이터의 기본 단위가 1바이트이므로 한 방향만 처리가 가능하여 입력 스트림과 출력 스트림을 따로 구성

File Class

  • 파일 시스템의 파일을 다루기 위한 클래스

  • 파일 크기, 속성, 이름 등 정보 확인, 생성 및 삭제 등

    리턴 타입메소드설명
    booleancreateNewFile()새로운 파일 생성
    booleanmkdir()새로운 디렉토리 생성
    booleanmkdirs()경로 상에 없는 모든 디렉토리 생성
    booleandelete()파일 또는 디렉토리 삭제
    ---------
    booleancanExecute()실행할 수 있는 파일인지 여부
    booleancanRead()읽을 수 있는 파일인지 여부
    booleancanWrite()수정 및 저장할 수 있는 파일인지 여부
    StringgetName()파일 이름 리턴
    StringgetParent()부모 디렉토리 리턴
    FilegetParentFile()부모 디렉토리를 File객체로 생성 후 리턴
    StringgetPath()전체 경로 리턴
    booleanisDirectory()디렉토리인지 여부
    booleanisFile()파일인지 여부
    booleanisHidden()숨김 파일인지 여부
    longlastModified()마지막 수정 날짜 및 시간 리턴
    longlength()파일 크기 리턴

파일 입출력 기반 스트림

  • 바이트 단위(영어, 숫자, 특수기호 사용 시)

    • InputStream
      FileInputStream, BufferedInputStream, DataInputStream

      • 파일을 바이트 단위로 읽기 위한 클래스
    • OutputStream
      FileOutputStream, BufferedOutputStream, DataOutputStream, PrintStream

      • 파일을 바이트 단위로 쓰기 위한 클래스
  • 문자 단위(한글까지 사용 시)

    • Reader
      FileReader, InputStreamReader, BufferedReader

      • 파일을 문자 단위로 읽기 위한 클래스
    • Writer
      FileWriter, OutputStreamWriter, BufferedWriter, PrintWriter

      • 파일을 문자 단위로 쓰기 위한 클래스

파일 입출력 관련 보조 스트림

  • 스트림의 기능을 향상시키거나 새로운 기능을 추가하기 위해 사용

  • 입출력 처리는 불가능 하고 기반 스트림에 추가로 적용

  • 종류

    • 입출력 성능 향상

      • 입출력 속도 향상 및 한 줄씩 출력 및 입력 관련 메소드 제공 보조 스트림

      • BufferedInputStream/BufferedOutputStream : 바이트 입출력을 버퍼링하는 클래스

      • BufferedReader/BufferedWriter : 문자 입출력을 버퍼링하는 클래스

    • 형변환 보조스트림
      InputStreamReader/OutputStreamWriter

      • 인코딩 방식을 고려한 한글 깨짐 방지를 위해 고려할 수 있는 보조 스트림
    • 기본 자료형 데이터 입출력
      DataInputStream/DataOutputStream

      • 기본자료형 및 문자열 관련 타입에 따른 메소드를 제공하는 보조 스트림
    • 객체 자료형 데이터 입출력
      ObjectInputStream/ObjectOutputStream

      • 객체 단위 입출력을 위한 보조 스트림
try (DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.dat")))) {
    dos.writeInt(123);
    dos.writeDouble(456.78);
} catch (IOException e) {
    e.printStackTrace();
}

try (DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("data.dat")))) {
    int intValue = dis.readInt();
    double doubleValue = dis.readDouble();
    System.out.println("Read int: " + intValue);
    System.out.println("Read double: " + doubleValue);
} catch (IOException e) {
    e.printStackTrace();
}

직렬화/역직렬화

  • 직렬화
    • 객체를 바이트 스트림으로 변환
    • 파일이나 네트워크를 통해 저장하거나 전송할 수 있게 하는 과정
  • 역직렬화
    • 바이트 스트림을 다시 객체로 복원
  • 자바에서는 'Serializable' 인터페이스를 구현하여 직렬화

NIO(New Input/Output)

  • Java 1.4에서 도입된 I/O API로, 기존의 java.io 패키지에 비해 비동기적이고 버퍼 지향적인 방식으로 데이터 입출력을 처리하는 기능을 제공

  • 주요 특징

    • 비동기 I/O 작업 지원
      • 작업 관리 시, 셀렉터 사용됨
    • 스트림 대신 버퍼를 사용하여 처리
    • 데이터 입출력이 채널을 통해 이루어짐
  • 장점

    • 성능 향상
    • 확장성
    • 유연성
  • 자바 NIO

profile
아뇨 소혠데요-

0개의 댓글