본문 바로가기
Programming/Java

I/O 스트림

by Tarake 2024. 8. 14.

I/O 스트림


스트림과 I/O 스트림의 차이


스트림은 데이터를 어떤 형태로 걸러내고 가공하는 것인지 즉 데이터를 목적에 맞게 걸러내거나 가공하는데 있습니다.

하지만 I/O스트림은 데이터의 입력과 출력입니다.

 

 

I/O 스트림


  • 파일
  • 키보드와 모니터
  • 그래픽카드, 사운드카드
  • 프린터, 팩스 등 출력장치
  • 서버 또는 클라이언트

입출력 대상은 다양하여 코드상의 입출력도 다양해지는 것이 일반적입니다. 하지만 자바에서는 동일한 방법으로 입출력이 가능합니다. 

 

자바 스트림에는 두 가지가 있습니다.

  • 입력 스트림(Input Stream) : 실행 중인 자바 프로그램으로 데이터를 읽어오는 스트림
  • 출력 스트림(Output Stream) : 실행 중인 자바 프로그램으로 데이터를 내보내는 스트림

자바 I/O스트림에는 두 가지 카테고리가 존재합니다.

  • 바이트 스트림 (Byte Streams): 바이트 단위로 데이터를 처리합니다. 이들은 이진 데이터와 문자 데이터 모두를 다룰 수 있습니다.
  • 문자 스트림 (Character Streams): 문자 단위로 데이터를 처리합니다. 주로 문자 데이터의 읽기와 쓰기에 사용됩니다.

 

바이트 스트림 (Byte Streams)

바이트 스트림은 바이트 단위로 데이터를 읽고 씁니다. 주로 파일, 네트워크 소켓 등에서 이진 데이터를 처리할 때 사용됩니다.

주요 클래스로는

  • InputStream: 바이트 입력 스트림의 최상위 클래스입니다. 주로 데이터를 읽는 데 사용됩니다.
    • FileInputStream: 파일에서 바이트를 읽는 데 사용됩니다.
    • BufferedInputStream: 데이터를 버퍼링하여 읽기 성능을 향상시킵니다.
    • DataInputStream: 기본 데이터 타입을 읽는 데 사용됩니다.
  • OutputStream: 바이트 출력 스트림의 최상위 클래스입니다. 주로 데이터를 쓰는 데 사용됩니다.
    • FileOutputStream: 파일에 바이트를 쓰는 데 사용됩니다.
    • BufferedOutputStream: 데이터를 버퍼링하여 쓰기 성능을 향상시킵니다.
    • DataOutputStream: 기본 데이터 타입을 파일에 쓰는 데 사용됩니다.
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;


public class Main {
    public static void main(String[] args) {
        String data = "Hello, Byte Streams!";
        
        // 바이트 스트림을 사용하여 데이터 쓰기
        try (FileOutputStream fos = new FileOutputStream("Java/iostream/test.txt")) {
            fos.write(data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 바이트 스트림을 사용하여 데이터 읽기
        try (FileInputStream fis = new FileInputStream("Java/iostream/test.txt")) {
            int content;
            while ((content = fis.read()) != -1) {
                System.out.print((char) content);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

실행 후 test 파일

 

 

'Programming > Java' 카테고리의 다른 글

스트림  (0) 2024.08.13
람다  (0) 2024.08.11
중첩 클래스  (0) 2024.08.11
열거형, 가변인자, 어노테이션  (0) 2024.08.11
컬렉션 프레임워크  (0) 2024.08.10