자바 개발자 20일차 (Java I/O stream)

Shy·2024년 1월 25일

아이티윌

목록 보기
22/22

Java I/O stream

PrintStream과 PrintWriter

  1. PrintStream
    • 바이트 출력 스트림의 한 종류로, 주로 텍스트 데이터를 출력하는 데 사용된다. System.out이 바로 PrintStream의 인스턴스다. 바이트 기반 스트림이지만, 문자열과 기본 데이터 타입을 쉽게 출력할 수 있는 메서드들을 제공한다.
  2. PrintWriter
    • 문자 출력 스트림으로, PrintStream과 유사한 기능을 제공하지만 문자 기반 스트림이다. 이는 문자 데이터를 처리할 때 더 효율적이며, 시스템의 기본 문자 인코딩에 의존하지 않는다는 장점이 있다.

DataInputStream과 DataOutputStream

  1. DataInputStream
    • 바이트 기반 입력 스트림으로, 기본 데이터 타입을 읽을 수 있는 메서드들을 제공한다. 이를 통해 바이트 데이터를 적절한 타입으로 변환하여 읽을 수 있다.
  2. DataOutputStream
    • 바이트 기반 출력 스트림으로, 기본 데이터 타입을 쓸 수 있는 메서드들을 제공한다. 이는 데이터를 타입에 맞게 변환하여 바이트 형태로 출력하는 기능을 가진다.

기본 데이터 타입을 읽고 쓴다?

Java에서 정의한 기본적인 데이터 타입들을 사용해서 데이터를 쓰거나 저장한다는 뜻이다.

Java의 기본 데이터 타입에는 int, float, double, boolean, char, byte, short, long 등이 있다.

예를 들어, DataOutputStream을 사용할 때, 이 스트림은 writeInt, writeFloat, writeDouble, writeBoolean, writeChar, writeByte, writeShort, writeLong과 같은 메서드들을 제공한다. 이 메서드들은 각각의 기본 데이터 타입에 맞게 데이터를 쓰는 기능을 수행한다.

이렇게 기본 데이터 타입을 사용하여 데이터를 쓰는 것은, 데이터를 바이트 단위로 직접 처리하는 것보다 더 직관적이고 오류를 줄일 수 있으며, 데이터의 타입을 명확하게 유지할 수 있다는 장점이 있다. 데이터를 이런 방식으로 쓰면, 나중에 DataInputStream을 통해 데이터를 읽을 때도 동일한 타입으로 쉽게 읽을 수 있다.

InputStreamReader와 OutputStreamWriter

  1. InputStreamReader
    • 바이트 입력 스트림을 문자 입력 스트림으로 변환한다. 외부로부터 읽어들인 바이트 데이터를 지정된 문자 인코딩에 따라 문자로 변환하는 역할을 한다.
  2. OutputStreamWriter
    • 문자 출력 스트림을 바이트 출력 스트림으로 변환한다. 문자 데이터를 지정된 문자 인코딩에 따라 바이트 데이터로 변환하여 외부로 출력한다.

ObjectInputStream과 ObjectOutputStream

  1. ObjectInputStream
    • 객체의 직렬화된 데이터를 읽어들여 객체로 복원하는 스트림이다. readObject 메서드를 통해 직렬화된 객체를 읽어 Java 객체로 복원한다.
  2. ObjectOutputStream
    • 객체를 직렬화하여 바이트 형태로 출력하는 스트림이다. writeObject 메서드를 사용하여 객체를 직렬화하여 출력한다.

BufferedInputStream과 BufferedOutputStream

Java I/O 스트림 중 버퍼링을 통해 입출력 효율을 높이는 역할을 한다.

  1. BufferedInputStream
    • 기능
      • BufferedInputStream은 기본 입력 스트림에 버퍼링 기능을 추가한다. 이 클래스는 내부적으로 데이터를 버퍼에 저장하고, 필요할 때 버퍼에서 데이터를 읽어들인다. 이 과정은 읽기 연산의 횟수를 줄여주어 성능을 향상시킨다.
    • 사용법
      • FileInputStream과 같은 기본 입력 스트림을 생성한 후, 이를 BufferedInputStream의 생성자에 전달하여 사용한다. 이렇게 하면 파일에서 데이터를 읽을 때, 한 번에 한 바이트씩 읽는 대신 여러 바이트를 버퍼에 담아서 읽을 수 있게 된다.
    • 장점
      • 단순히 바이트 단위로 데이터를 읽는 것보다 훨씬 효율적이며, 특히 대용량 데이터를 읽을 때 성능 차이가 크게 나타난다.
  2. BufferedOutputStream
    • 기능
      • BufferedOutputStream 역시 기본 출력 스트림에 버퍼링 기능을 추가한다. 이 클래스는 출력할 데이터를 내부 버퍼에 쌓아두고, 버퍼가 가득 차거나 스트림이 닫힐 때 데이터를 실제 출력 소스에 전달한다.
    • 사용법
      • FileOutputStream과 같은 기본 출력 스트림을 생성한 후, 이를 BufferedOutputStream의 생성자에 전달하여 사용한다. 이렇게 하면 데이터를 출력할 때 한 번에 한 바이트씩 쓰는 대신 버퍼에 모아서 쓸 수 있다.
    • 장점
      • BufferedOutputStream을 사용하면 데이터를 즉시 출력하는 것보다 효율적으로 데이터를 쓸 수 있으며, 시스템 리소스를 더 효율적으로 사용할 수 있다.

BufferedInputStreamBufferedOutputStream은 특히 대용량 데이터를 처리할 때, 혹은 많은 수의 작은 입출력 연산이 필요할 때 매우 유용하다. 이들은 Java에서 파일이나 네트워크를 통한 데이터 처리에 자주 사용되는 중요한 클래스들이다.

profile
신입사원...

0개의 댓글