개발노트

InputStream, OutputStream, FileInputStream, FileOutputStream 본문

Programming/JAVA

InputStream, OutputStream, FileInputStream, FileOutputStream

dev? 2022. 5. 15. 15:04
반응형
InputStream

- byte 단위의 입력 스트림의 최상위 클래스(추상 클래스)이다. 

(추상 클래스 - 스스로 객체 생성 불가)

- buffer, file, network 단에서 입력되는 데이터를 읽어오는 기능을 한다. 

 

메서드 설명
  void close() throws IOException 입력 스트림을 닫는다.
  int read() throws IOException 1바이트를 읽어들인 후, int 형으로 변환하여 리턴한다.
만약 EOF(End Of File)을 만날 경우, -1을 출력한다.
( EOF는 파일의 끝을 의미, 윈도우에서 "<Crtl> +<Z>"
명령 과 동일한 기능을 수행 )
 int read(byte buffer[]) throws IOException 입력 스트림으로부터 buffer[]의 크기만큼 데이터를 읽어들여 buffer[]에 저장한다.
리턴 값은 읽어들인 데이터의 길이이다.
( inputStream.available(); => 파일의 크기 읽어오기 )

 

FileInputStream

- InputStream을 상속하여 구현한 자식 클래스이다. (보조 스트림)

- 하드 디스크 상에 존재하는 파일로부터 byte 단위의 입력을 처리하는 클래스
(즉, 출발 지점과 도착 지점을 연결해주는 스트림을 생성하는 클래스)
- 파일이 존재하지 않을 경우 FileNotFoundException 예외를 처리해야 한다.
- 파라미터로 File 객체나 String 객체를 받는다.

 

 

public class Test1 {
    public static void main(String[] args) {
 
        String path = "test.txt"; // 상대경로
       
       //읽은 내용이 저장될 byte 배열
        byte[] data = null;
       
       // byte 배열을 반환해 저장될 문자열 변수
        String result = null;

        // 파일 읽기
        InputStream inputStream = null;

        try {
            inputStream = new FileInputStream(path); // 파일 열기
            // 데이터를 저장할 byte 배열 만들기
            data = new byte[inputStream.available()];  // inputStream.available(); : 파일의 크기 읽어오기
            inputStream.read(data);
            System.out.println("파일 읽기 성공");
        } catch (FileNotFoundException e) {
            System.out.println("저장 경로를 찾을 수 없음 >> " + path); 
        } catch (IOException e) {
            System.out.println("알 수 없는 에러");
        }finally {
            try {
                if (inputStream != null)
                    inputStream.close(); // 파일 닫기
            }catch (IOException e){
                e.printStackTrace();
            }
        }

        //byte 배열에 저장된 데이터를 문자열로 변환
        if (data != null){
            try {
                result = new String(data, "utf-8");
                System.out.println(result);
            } catch (UnsupportedEncodingException e) {
                System.out.println("지원하지 않는 인코딩입니다.");
            }
        }
    }
}

 

 


 

OutputStream

byte 단위의 출력 스트림의 최상위 클래스(추상 클래스)이다.
(추상 클래스 - 스스로 객체 생성 불가)
- buffer, file, network 단으로 데이터를 내보내는 기능을 한다.

 

메서드 설명
void close() throws IOException 출력 스트림을 닫는다.
void write(int num) throws IOException int num의 하위 8비트(1Byte)를 출력스트림으로 내보낸다.
void write(byte buffer[]) throws IOException buffer[]에 저장된 데이터를 출력스트림을 통해 내보낸다.
void flush() throws IOException 버퍼에 있는 내용을 출력스트림으로 내보낸다.

※ 버퍼 (buffer)

- 데이터가 목적지로 보내지기 전에 머무는 곳이다.
- 입력 버퍼와 출력 버퍼가 있으며, 출력 스트림은 기본적으로 flush() 명령이 떨어지기 전까지는 출력 버퍼에서 목적지로 데이터가 전달되지 않는다.
(일반적으로는 자동으로 flush 메서드를 호출하도록 구현되어있다.)
- 장점 : 데이터를 모아서 전송하기 때문에 속도 측면에서 뛰어나다.

 

 

FileOutputStream

- OutputStream을 상속한 자식 클래스이다. (보조 스트림)
파일로 데이터를 출력하는 기능을 수행한다.
출발 지점과 도착 지점을 연결해주는 스트림을 생성한다.
- 기존에 파일을 덮어쓰는 방식과 이어 쓰는 방식을 구분하기 위해, 생성자의 두 번째 인자 append를 

   true / false로 지정할 수 있다.

 

public class Test {
    public static void main(String[] args) {

        String str = "가나다라마바사abcdefg12345";
        String path = "test.txt"; // 상대 경로

        byte[] buffer = null;

        try {
            // 문자열을 byte 배열로 변경
            buffer = str.getBytes("utf-8");  // utf-8 인코딩 적용
        } catch (UnsupportedEncodingException e) {
            System.out.println("지원하지않는 인코딩입니다.");
            e.printStackTrace();
        }

        // 파일 저장
        OutputStream outputStream = null;

        try {
            outputStream = new FileOutputStream(path); // 파일열기
            outputStream.write(buffer);
            System.out.println("파일 저장됨");
        } catch (FileNotFoundException e) {
            System.out.println("저장 경로를 찾을 수 없습니다.");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("저장에 실패");
            e.printStackTrace();
        } finally {
            try {
                if (outputStream != null)
                    outputStream.close();
            } catch (IOException e) {
                System.out.println("파일을 닫는데 실패");
                e.printStackTrace();
            }
        }
    }
}

 

 

 

 

https://blog.naver.com/PostView.nhn?blogId=pjok1122&logNo=221505642784 

 

자바(Java) InputStream, OutputStream, FileInputStream, FileOutputStream

1. InputStream - 바이트 단위의 입력스트림의 최상위 클래스(추상클래스)로서 스스로 객체 생성이 불가...

blog.naver.com

 

반응형

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

Thread (쓰레드)  (0) 2022.05.17
직렬화(Serialization)  (0) 2022.05.16
Collections.sort()  (0) 2022.05.14
List / ArrayList 클래스  (0) 2022.05.13
맵 클래스 (Map Class)  (0) 2022.05.12