본문 바로가기
BackEnd/Java

IO (입출력)

by pplucy 2020. 10. 31.


1.IO
입출력 : 외부지원(키보드,파일, DB서버, 네트워크로 연결된 다른 PC)로 부터 자바프로그램으로 데이터를 읽어오거나

                대로 외부자원에 데이터를 송출하는 것.
                 - > JVM에 외부자원의 데이터를 가지고와서 올려두는 것.
 

2.스트림(Stream) -> 흐름

  : 프로그램의 데이터를 파일(외부)로 내보내야 할 때, 외부로 내보내기 위하여 반드시 외부 매체와의 단방향적인

    통로를 만들어줘야 하는데 이 통로가 바로 '스트림'이다.

  : 데이터가 오가는 단방향 통로이다. 즉 하나의 Stream으로 입력과 출력을 모두 해결할 수 없다.
  : 입력과 출력을 허가 하기 위해서는 두 개의 Stream을 열어야 한다.
  : 사용이 끝나면 반드시 Stream을 닫아줘야 한다(Close메소드)  -> 시스템에게 자원을 반납한다! Colse 꼭 기억 ! 
    ->  만약 사용이 끝난 Stream을 닫아주지 않으면 JVM이 알아서 닫아준다. 하지만 오만가지 예외상황이 발생할 수 있으니
          반드시 수동으로 닫아줘야한다.


3. Stream 구분
    - '바이트스트림' 과 '문자스트림'으로 구분
       1) 바이트스트림: 스트림을 통해 움직이는 데이터의 크기가 1바이트
             ->  자바의 문자가 2바이트이기 때문에 바이트스트림을 통해 문자데이터를 주고 받을 경우 문제가 발생할 수 있다.
       2) 문자스트림: 스트림을 통해 움직이는 데이터의 크기가 2바이트 

   - '기반스트림'과 '보조스트림'으로 구분
      1) 기반스트림: 실제적으로 데이터를 송신 송출하는 스트림
             - FileInputStream/ FileOutputStream : 파일 입출력 스트림


             - PipedInputStram/ PipedOutPutStream : 쓰레드간 데이터입출력에 사용


             - ByteArrayInputStream/ ByteArrayOutputStream : 바이트 배열을 이용한 입출력 시스템
     

      2)  보조스트림: 기반스트림의 기능을 추가해주는 클래스
            - BufferedInputStream/ BufferedOutputStream(Byte 기반)

 

         - BufferedReader/BufferedWriter(Char기반)
               : 외부자원과 직접 데이터를 입출력하지 않고, 중간 버퍼를 사용해 속도를 향상


             - ObjectInputStream/ ObjectOutputStream
                : 객체를 파일 또는 네트워크로 입출력 할 수 있도록 기능을 제공(serializable 직렬화)


             - InputStreamReader/ OutputStreamWriter
               : 바이트기반의 스트림을 문자기반의 스트림으로 변환

 

 

ex) 엑셀(.xls), 그림파일(.jpg), 음악파일(.mp3) 등등 -> Byte단위 

       일반 자바파일(.java) -> char단위

'BackEnd > Java' 카테고리의 다른 글

IO_BufferedInputStream & BufferedOutputStream  (0) 2020.10.31
IO_FileOutPutStream & FileInputStream  (0) 2020.10.31
IO _ File 클래스  (0) 2020.10.31
Date와 Calendar  (0) 2020.10.29
패키지와 변수  (0) 2020.09.23

댓글