본문 바로가기
Programming/JAVA

InputStream / OutputStream(byte단위)

by 성동구불주먹 2024. 6. 11.

InputStream(입력스트림)과 OutputStream(출력스트림)은 기본 스트림으로 byte 단위로 데이터를 다룬다.

 

 

FileInputStream  / FileOutputStream

파일로부터 데이터를 읽기/쓰기 위한 입력/출력용 기본 스트림

바이트 단위의 입력/출력을 처리하므로 이미지나 오디오 파일과 같은 이진 파일을 다룰 때 유용하다.

 

 


 

InputStream

이 추상 클래스는 바이트(Byte) 입력 스트림을 나타내는 모든 클래스의 슈퍼 클래스다.

하위 클래스에는  FileInputStream, ByteArrayInputStream이 있음(xxxInputStream 식으로 표현됨)

 

FileInputStream

: 기존 파일과 연결된 입력 스트림 객체를 생성

  FileInputStream(File file), FileInputStream(String name)

 

📝 주요메소드

메소드 설명
abstract int read() 입력 스트림으로부터 1 바이트를 읽어 정수로 리턴함
int read(byte[] b) 입력 스트림으로부터 읽어서 byte 배열에 저장하고, 
읽어 들인 바이트 개수를 리턴함
int read(byte[]b , int off, int len) len 바이트를 읽어서 바이트 배열의 off 위치부터 저장함
int available() 다음 read()할 때, 블로킹 없이 입력 스트림에서 읽을 수 있는
바이트 단위의 데이터 길이
long skip(long n) 입력 스트림에서 n 바이트를 건너 뜀
void mark(int readlimit) 입력 스트림에서 현재 위치를 표시함
void reset() mark()에서 표시된 위치로 스트림의 현재 위치를 이동

 

 

✍️  InputStream 예제코드

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamExample {
    public static void main(String[] args) {
        // 읽을 파일 경로를 지정
        String filePath = "example.txt";
        
        // InputStream 객체를 선언
        InputStream inputStream = null;

        try {
            // FileInputStream 객체를 생성하여 파일을 읽기
            inputStream = new FileInputStream(filePath);
            
            // 읽은 데이터를 저장할 배열을 선언
            byte[] buffer = new byte[1024];
            int bytesRead;

            // 파일에서 데이터를 읽어오는 동안 반복
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                // 읽은 데이터를 String으로 변환하여 출력
                System.out.print(new String(buffer, 0, bytesRead));
            }
        } catch (IOException e) {
            // 예외가 발생하면 예외 메시지를 출력
            e.printStackTrace();
        } finally {
            // InputStream을 닫는다.
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

 


 

OutputStream

이 추상 클래스는 바이트(Byte) 출력 스트림을 나타내는 모든 클래스의 슈퍼 클래스다.

하위 클래스에는  FileOutputStream, ByteArrayOutputStream이 있음(xxxOutputStream 식으로 표현됨)

 

FileOutputStream

: 기존 파일(없다면 생성)과 연결된 출력 스트림 객체를 생성

  FileOutputStream(String name), FileOutputStream(File file, boolean append)

 

📝 주요메소드

메소드 설명
abstract void write(int b) 1바이트 데이터를 출력 스트림에 씀
void write(byte[] b) byte형 배열 b의 모든 바이트를 출력 스트림에 씀
void write(byte[] b, int off, int len) byte형 배열 b의 off 위치부터 len 바이트를
출력 스트림에 씀
void close() 출력 스트림을 닫고 자원을 돌려줌
void flush() 출력 스트림에 남아 있는 모든 데이터를 
최종 목적지로 보

 

 

✍️ FileOutputStream 예제코드

import java.io.*;

public class Main {
    public static void main(String[] args) {
        File inFile = new File("c:\\Java\\Main.java");      //해당 경로에 있는 파일을 읽음
        File outFile = new File("c:\\Java\\FileTemp.java"); //출력할 파일 객체를 생성
        try ( InputStream is = new FileInputStream(inFile); //파일 인자를 객체로 전달
              OutputStream os = new FileOutputStream(outFile)){
            int nData;
            nData = is.read();
            while (nData != -1) { //-1는 파일의 끝을 의미, 파일이 끝나면 while문 종료
                os.write(nData);
                nData = is.read();
            } 
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

 

반응형