언어(Language)/Java

[Java] 자바 파일 입출력 스트림 FileInputStream과 FileOutputStream 개념 정리 및 활용

잇트루 2022. 9. 28. 00:00
반응형

InputStream과 OutputStream

자바에서는 입출력을 다루기 위한 InputStream과 OutputStream이 있다.

스트림은 단방향으로만 데이터를 전송할 수 있기 때문에, 입력과 출력을 동시에 처리하기 위해서는 각각의 스트림이 필요하다.

 

입출력 스트림은 어떤 대상을 다루느냐에 따라 종류가 나뉜다.

예를 들어 파일(File)을 다룰 때에는 FileInputStream과 FileOutputStream을 사용하고, 프로세스를 다룰 때에는 PipedInputStream과 PipedOutputStream을 사용한다.

 

FileOutputStream

먼저 FileInputStream을 활용하기 전, 자바 프로그래밍으로 파일을 생성하여 저장한다.

import java.io.FileOutputStream;

public class OutputStreamEx {
    public static void main(String[] args) {
        try {
            FileOutputStream fileOutput = new FileOutputStream("hello.txt");
            // 파일에 저장할 내용
            String word = "hello";

            // word의 값을 byte로 변환하여 저장
            byte b[] = word.getBytes();

            // 파일에 word 작성하기
            fileOutput.write(b);

            // 파일 닫기
            fileOutput.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

 

FileInputStream

위의 코드로 작성한 hello.txt 파일을 FileInputStream을 통해 읽어올 수 있다.

 

파일 입력 스트림 예제

import java.io.FileInputStream;

public class InputStreamEx {
    public static void main(String[] args) {
        try {
            FileInputStream fileInput = new FileInputStream("hello.txt");
            int i = 0;

            // 파일을 1글자씩 읽어오기
            while ((i = fileInput.read()) != -1) {
                System.out.print((char)i);
            }
            // 파일 닫기
            fileInput.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

 

BufferedInputStream

또한, BufferedInputStream이라는 보조 스트림을 사용하면 향상된 성능으로 파일을 읽어올 수 있다.

버퍼는 바이트 배열로, 여러 바이트를 저장하여 한 번에 많은 양의 데이터를 입출력할 수 있도록 도와주는 임시저장소이다.

import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class InputStreamEx {
    public static void main(String args[]) {
        try {
            FileInputStream fileInput = new FileInputStream("hello.txt");
            // BufferedInputStream 객체 생성
            BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
      
            int i = 0;
            while ((i = bufferedInput.read()) != -1) {
                System.out.print((char)i);
            }
            fileInput.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
반응형