본문 바로가기
백엔드/Java

<FAST CAMPUS>자바 웹개발-객체지향 프로그래밍

by 고구마는호박고구마 2021. 1. 26.

<객체지향 프로그래밍 67장~70장>

 

 

표준 입출력

      

         System 클래스의 표준 입출력 멤버

                   public class System{

                            public static PrintStream out; // 표준 출력 스트림

                            public static InputStream in;  // 표준 입력 스트림

                            public static PrintStream err; // 표준 에러 스트림

                   } 

 

          System.in.read() 를 사용 할 때 in 멤버는  inputStream 을 쓰고 그 안에 read 라는 메서드로 읽고

          반환 값은 int로 된다 byte로 읽는데 int로 반환되는 이유는 파일의 끝에 도달하면 -1을 반환해야되기 때문

 

 

                                 입력 예 

 

반환값이 한바이트 이기 때문

 

                                  입력에 한글을 설정

 

'끝'은 한글 = 2바이트 입력은 1바이트씩 밖에 못읽으므로 '끝'을 인식하지 못함.

 

                                   해결 ( 보조스트림 : InputStreamReader ) 

다른 스트림의 기능을 부가 ( 바이트 -> 문자 ) 

 

바이트 단위 입출력 스트림

 

                  InputStream : 바이트 단위 입력 스트림 최상위 클래스

                  OutputStream : 바이트 단위 출력 스트림 최상위 클래스 

 

                  추상 메서드를 포함한 추상 클래스로 하위 클래스가 구현하여 사용

 

             

       FileInputStream 과 FileOutputStream 사용하기

          - 파일에 한 바이트씩 자료를 읽고 쓰는데 사용 ( 한글은 못읽는다 . 한글은 -> FileReader or FileWriter 사용 ) 

          - 입력 스트림은 파일이 없는 경우 예외 발생

          - 출력 스트림은 파일이 없는 경우 파일 생성하여 출력 

 

try부분에서 fis에 파일 입력을 하고 catch 문에서 txt가 없을 경우 예외처리를 하고 finally 부분에서는 파일을 닫아주는 역할을 하게 된다. 

                               

   

                        좀더 깰끔 하게

파일에 끝에 도달하면 -1이 반환 되기 때문에 (한글은 못읽는다 한바이트씩 읽기 때문에) 

 

 

        FileInputStream의 read 메서드 

read(bs) (바이트 array 형식 ) 1바이트씩 읽는게 아니고 10개씩 읽을수 있다. 나머지 QRST는 쓰레기값

  

 

 

  FileOutputStream  

 

 

 

 

FileInputStream + FileOutputStream

파아스로 alpha.txt 쓰고 파인스로 읽어서 출력까지 되는 코딩입니다.

 

문자 단위 입출력 스트림

 

              Reader : 문자 단위로 읽는 최상위 스트림

              Writer : 문자 단위로 쓰는 최상위 스트림

              추상 메서드를 포함한 추상 클래스로 하위 클래스가 상속받아 구현

 

 

 

   문자를 읽을 때 ( FileReader )

 

  byte로 읽다가 문자로 읽어야 될 경우 

 

 

  문자를 쓸 때 ( FileWriter )

 

 

 

 

보조 스트림  ( 기능을 더해주는 역할 )

 

          - 실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림

             FilterInputStream 과 FilterOutputStream 이 보조 스트림의 상위 클래스

 

 

           Buffered 스트림 : 내부에 8192 바이트 배열을 가지고 있음 ( 읽거나 쓸 떄 속도가 빠름 )

           DataInputStream / DataOutputStream : 자료가 저장된 상태 그대로 자료형을 유지하며 읽거나 쓰는 

                                                                  기능을 제공하는 스트림 

 

 

          Buffered 스트림

 

 

 

데코레이터 패턴

   BufferedReader isr = new BufferedReader ( new InputStreamReader ( socket.getInputStream())) ; 

   < 보조 스트림이 문자 스트림을 감싸고 인풋스트림을 감싸고 계속 기능이 추가된다 -> 데코레이터 패턴 > 

 

 

 

 

 

 

 

댓글