crushed-taro 2025. 3. 1. 14:25
728x90
반응형

1. 입출력 개요

1. Java 입출력이란

입출력(I/O, Input and Output)이란 프로그램이 외부에서 데이터를 입력받고 출력하는 과정을 의미합니다.

Java에서는 java.io 패키지와 java.nio 패키지를 사용하여 입출력을 처리할 수 있습니다.

2. 입출력 방식의 종류

Java의 입출력은 크게 기본 스트림 (Stream)과 NIO (New I/O) 방식으로 나뉩니다.

 Stream (기본 I/O): InputStream, OutputStream, Reader, Writer 사용

 NIO (New I/O): java.nio 패키지를 활용하여 버퍼(Buffer) 기반의 비동기 처리 지원

2. 파일 관련 입출력

1. 파일 입력 (File Input)

Java에서 파일을 읽을 때 FileReader, BufferedReader, FileInputStream 등을 사용할 수 있습니다.

import java.io.*;

public class FileReadExample {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            System.out.println("파일을 읽는 중 오류 발생: " + e.getMessage());
        }
    }
}

2. 파일 출력 (File Output)

파일에 데이터를 쓰려면 FileWriter, BufferedWriter, FileOutputStream 등을 사용할 수 있습니다.

import java.io.*;

public class FileWriteExample {
    public static void main(String[] args) {
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
            writer.write("Java 파일 입출력 예제입니다.");
            writer.newLine();
            writer.close();
        } catch (IOException e) {
            System.out.println("파일을 쓰는 중 오류 발생: " + e.getMessage());
        }
    }
}

3. 바이트 기반 vs 문자 기반 스트림

Java의 입출력 스트림은 바이트 기반 문자 기반으로 구분됩니다.

스트림 종류 클래스 설명
바이트 기반 입력 InputStream 바이트 단위 데이터 입력
바이트 기반 출력 OutputStream 바이트 단위 데이터 출력
문자 기반 입력 Reader 문자 단위 데이터 입력
문자 기반 출력 Writer 문자 단위 데이터 출력

1. 바이트 스트림 예제 (InputStream & OutputStream)

import java.io.*;

public class ByteStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("image.jpg");
             FileOutputStream fos = new FileOutputStream("copy.jpg")) {
            
            int data;
            while ((data = fis.read()) != -1) {
                fos.write(data);
            }
        } catch (IOException e) {
            System.out.println("파일 입출력 오류 발생: " + e.getMessage());
        }
    }
}

2. 문자 스트림 예제 (Reader & Writer)

import java.io.*;

public class CharStreamExample {
    public static void main(String[] args) {
        try (FileReader reader = new FileReader("text.txt");
             FileWriter writer = new FileWriter("copy.txt")) {
            
            int data;
            while ((data = reader.read()) != -1) {
                writer.write(data);
            }
        } catch (IOException e) {
            System.out.println("파일 입출력 오류 발생: " + e.getMessage());
        }
    }
}

4. 버퍼링 (Buffering)과 성능 최적화

1. 버퍼링이란

파일을 읽고 쓸 때 버퍼(Buffer)를 사용하면 속도가 빨라집니다.

 BufferedReader / BufferedWriter → 텍스트 처리 속도 향상

 BufferedInputStream / BufferedOutputStream → 바이너리 처리 속도 향상

import java.io.*;

public class BufferedExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("largeFile.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
            }
        } catch (IOException e) {
            System.out.println("버퍼링 입출력 오류 발생: " + e.getMessage());
        }
    }
}

5. 자주 발생하는 입출력 예외 처리

예외 유형   원인 해결 방법
FileNotFoundException 파일이 존재하지 않음 파일 경로 확인
IOException 읽기/쓰기 중 오류 try-catch 블록으로 예외 처리
SecurityException 접근 권한 없음 파일 권한 확인

 

728x90
반응형