자바 I/O 개론 - 8

목차

    자바 I/O 개론

    💡 학습 목표
        1. I/O 시스템 종류
        2. 스트림의 두 가지 주요 특성

     

    • 자바 I/O (입출력)는 데이터를 읽고 쓰는 기능을 말하며, 파일, 네트워크, 다른 프로그램 등 다양한 소스와 대상으로부터 데이터를 주고받는 데 사용된다.
    • 자바의 I/O 시스템은 크게 네 가지 주요 구성 요소로 나눌 수 있다 :
      바이트 기반 스트림, 문자 기반 스트림, 버퍼링 스트림, 고수준의 스트림
    사전 기반 지식

    Stream 이라는 단어에 대해서 먼저 살펴 보자.

    스트림(Stream)은 데이터를 순차적으로 처리하는 일련의 연속된 데이터 요소들입니다. 자바에서 스트림은 데이터의 흐름을 읽고 쓰는 데 사용되는 추상적인 개념으로, 입출력 작업을 수행할 때 데이터를 한 곳에서 다른 곳으로 이동시키는 매개체 역할을 합니다.

    java.io 패키지

    🔔 자바 I/O의 스트림 API에는 실제로 여러 인터페이스와 추상 클래스가 정의되어 있습니다.
    주의 !
    자바에서 "스트림"이라는 용어는 두 가지 맥락에서 사용됩니다. 하나는 I/O에 관련된 데이터 흐름을 처리하는 스트림이며, 또 다른 하나는 자바 8 이후에 도입된 java.util.stream 패키지에 포함된 스트림 API입니다.

    1. I/O 시스템 종류

    1. 바이트 기반 스트림
      • InputStream / OutputStream: 이 클래스들은 데이터를 바이트 단위로 읽고 쓰는 기본적인 기능을 제공.
      • 예를 들어, FileInputStream과 FileOutputStream은 파일로부터 바이트를 읽거나 파일에 바이트를 쓰는 데 사용.
    2. 문자 기반 스트림
      • Reader / Writer: 바이트 기반 스트림과 달리, 문자 기반 스트림은 문자 데이터의 입출력을 처리.
      • 이것은 인코딩 문제를 자동으로 처리하기 때문에 텍스트 데이터를 다룰 때 특히 유용.
      • FileReader와 FileWriter는 텍스트 파일을 읽고 쓸 때 사용.
    3. 버퍼링 스트림
      • BufferedInputStream / BufferedOutputStream / BufferedReader / BufferedWriter: 이 스트림들은 입출력 효율을 증가시키기 위해 내부적으로 버퍼를 사용.
      • 버퍼링 스트림은 데이터를 일정량 모아 놓았다가 한 번에 처리하기 때문에 많은 작은 입출력 연산이 필요할 때 성능을 향상시킬 수 있다.
    4. 고수준의 스트림
      • DataInputStream / DataOutputStream: 이 스트림들은 자바의 기본 데이터 타입을 쉽게 읽고 쓸 수 있게 해준다.
        예를 들어, 정수, 실수 등을 데이터 소스로부터 직접 읽거나 쓸 수 있다.
      • ObjectInputStream / ObjectOutputStream: 객체 직렬화에 사용되며, 객체를 바이트 형태로 변환하거나 바이트에서 객체를 복원하는 기능을 제공.

    2. 스트림의 두 가지 주요 특성

    1. 단방향성
      • 스트림은 단방향으로만 데이터를 처리.
      • 즉, 입력 스트림은 데이터를 읽는 데 사용되며, 출력 스트림은 데이터를 쓰는 데 사용.
      • 두 작업을 동시에 수행하려면 입력 스트림과 출력 스트림을 별도로 사용해야 한다.
    2. 순차적 접근
      • 스트림은 데이터에 순차적으로 접근한다.
        이는 스트림을 통해 데이터를 처리할 때, 한 번에 하나의 데이터 요소만 처리하며, 일반적으로 한 번 처리된 데이터 요소는 다시 되돌아갈 수 없다는 의미(일부 스트림은 마킹 기능을 제공하여 이러한 제한을 일부 완화).
      • 즉, 스트림은 먼저 보낸 데이터를 먼저 받는다. 또한 중간에 건너뜀 없이 연속적으로 데이터를 주고 받는다. 이 특성은 큐(Queue)의 FIFO(First In First Out) 구조와 유사하다.

    Java 유용한 클래스 - 3 으로 돌아가기

     

    'Java > Java 유용한 클래스' 카테고리의 다른 글

    파일 입력 스트림(바이트 기반) - 10  (0) 2024.05.14
    표준 입출력이란? - 9  (0) 2024.05.14
    Inner class(중첩 클래스) - 7  (0) 2024.05.14
    Thread에 wait와 notify - 6  (0) 2024.05.13
    Java multi-threading - 5  (0) 2024.05.01