반응형

스트림 입출력이란?

스트림 입출력은 데이터를 순차적으로 읽거나 쓰는 작업을 버퍼를 사용하여 처리하는 방식입니다. 이는 파일, 네트워크, 사용자 입력 등 다양한 입출력 장치와 프로그램 간의 데이터 전달을 효율적으로 관리할 수 있게 해줍니다.

자바의 입출력 스트림

자바에서는 입출력 스트림을 이용해 응용 프로그램과 외부 입출력 장치 간의 데이터를 연결합니다. 스트림은 크게 입력 스트림출력 스트림으로 나뉩니다.

  • 입력 스트림(Input Stream): 입력 장치(예: 키보드, 파일)로부터 자바 프로그램으로 데이터를 전달하는 역할을 합니다.
  • 출력 스트림(Output Stream): 자바 프로그램에서 처리된 데이터를 출력 장치(예: 모니터, 파일)로 출력하는 역할을 합니다.

자바의 입출력 스트림 종류

자바에서 입출력 스트림은 바이트 스트림문자 스트림으로 나눌 수 있습니다. 바이트 스트림은 1바이트씩 데이터를 처리하는 반면, 문자 스트림은 2바이트씩 문자 단위로 데이터를 처리합니다.

  1. 바이트 스트림: 기본적인 입출력 클래스로, 데이터를 바이트 단위로 처리합니다.
    • 주요 클래스: FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream
  2. 문자 스트림: 텍스트 파일을 읽거나 쓸 때 사용되는 클래스들로, 문자 단위로 처리합니다.
    • 주요 클래스: FileReader, FileWriter, BufferedReader, BufferedWriter

JDK의 문자 스트림 클래스 계층 구조

자바의 문자 스트림 클래스는 Reader와 Writer 클래스를 상속하여 구현됩니다. 이들은 문자 데이터를 효율적으로 처리하는 데 유용합니다.

  • 문자 입력 스트림: FileReader, InputStreamReader
  • 문자 출력 스트림: FileWriter, OutputStreamWriter

FileReader를 이용한 텍스트 파일 읽기

FileReader 클래스는 텍스트 파일을 읽기 위한 가장 기본적인 클래스입니다. 사용법은 다음과 같습니다.

import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("example.txt")) {
            int i;
            while ((i = fr.read()) != -1) {
                System.out.print((char) i);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

InputStreamReader와 OutputStreamWriter

InputStreamReader와 OutputStreamWriter는 각각 바이트 스트림과 문자 스트림 간의 변환을 담당하는 클래스입니다. 이들을 사용하면 바이트 스트림으로 읽거나 쓴 데이터를 문자 스트림으로 변환할 수 있습니다.

InputStreamReader 생성자

InputStreamReader isr = new InputStreamReader(System.in);

InputStreamReader는 InputStream을 문자 스트림으로 변환해줍니다. 위 예제에서는 표준 입력을 문자 스트림으로 처리합니다.

OutputStreamWriter 생성자

OutputStreamWriter osw = new OutputStreamWriter(System.out);

OutputStreamWriter는 바이트 출력을 문자 스트림으로 변환하여 표준 출력에 데이터를 쓸 수 있게 해줍니다.

바이트 스트림 클래스

자바의 바이트 스트림 클래스는 파일 입출력 작업에서 널리 사용됩니다. 이 스트림은 바이트 단위로 데이터를 읽거나 씁니다.

FileOutputStream 생성자 및 주요 메소드

FileOutputStream 클래스는 바이트 단위로 파일에 데이터를 출력하는 데 사용됩니다.

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamExample {
    public static void main(String[] args) {
        try (FileOutputStream fos = new FileOutputStream("output.txt")) {
            fos.write("Hello, Java!".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • write(byte[] b): 바이트 배열을 파일에 씁니다.
  • close(): 스트림을 닫고 리소스를 해제합니다.

버퍼 입출력 스트림

버퍼 입출력 스트림은 데이터를 일시적으로 메모리에 저장하고, 데이터를 한 번에 처리하여 성능을 향상시킵니다.

Buffered 스트림의 주요 생성자

BufferedReader, BufferedWriter, BufferedInputStream, BufferedOutputStream 클래스는 데이터를 버퍼에 임시 저장한 후 한 번에 읽거나 쓰는 방식으로 성능을 개선합니다.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

File 클래스

File 클래스는 파일 시스템과 상호작용하기 위한 다양한 메소드를 제공합니다. 파일 생성, 삭제, 정보 조회 등 여러 기능을 수행할 수 있습니다.

import java.io.File;
import java.io.IOException;

public class FileExample {
    public static void main(String[] args) {
        File file = new File("example.txt");

        if (file.exists()) {
            System.out.println("File exists!");
        } else {
            try {
                file.createNewFile();
                System.out.println("File created!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

결론

자바의 입출력 스트림을 이해하고 사용하는 것은 파일 처리 및 데이터 전송에서 매우 중요합니다. 바이트 스트림과 문자 스트림의 차이점, 버퍼 입출력의 효율성, 그리고 File 클래스의 활용 방법까지 다양한 기능을 활용하여 효율적인 입출력 작업을 수행할 수 있습니다.



반응형

+ Recent posts