본문 바로가기

프로그래밍/기타

스트림

◈ Stream
   데이터의 흐름.

◇ 스트림의 구분
  1. 입력스트림 → 프로그램 → 출력스트림
  2. 문  자 : 문자 스트림
     데이터 :  바이트 스트림


IOStream 구분
Node Stream : 외부자원과 연결하는 것이 목적인 스트림
                     실제 읽고 쓰는 방법은 다양하지 않다.


Filter Stream : 읽고 쓰는 것이 목적
                    외부 자원과 연결 불가
                    기존의 NodeStream에 추가되어 기존 Stream의 읽고 쓰는 방법을 upgrade 하는 것이 목적


◇ 연결방법
 1. Node Stream으로 외부자원과 연결
 2. Filter Stream으로 Filtering (I/O 방법을 풍부하게 만들어 준다.)
 3. Filter를 이용해서 Read / Write 실시
 4. 연결 Close



◇ 스트림 구분
  ▷ Byte
       Input Stream        : [Node] File~   / System.in  (키보드)
                                  [Filter] Data~ (primitive type) / Object~ / Buffered
       Output Stream      : [Node] File~   / System.out (모니터)
                                  [Filter] Data~  / Object ~ / Buffered

   ▷ Char(2byte)
       Reader               : [Node] File~
                                  [Filter] Buffered~ / InputStream~
       Writer                 : [Node] File~
                                  [Filter] Buffered~ / OutputStream~ / Print~


◇ Filter Stream과 Node Stream 구분하는 법
  클래스의 생성자에 Node Stream 객체를 받으면, Filter Stream.
  Filter은 연결이 불가능 하므로, 연결 기능이 있는 Filter Stream을 받아야 함.


◇ 파일 읽기 
                                              ※ 반드시 예외 처리를 해주어야 함. 파일 입출력 과정은 checked exception
  1. 데이터를 읽기 위한 파일 열기 
       FileReader reader = new FileReader("Plming.txt");
  2. 파일에 데이터 쓰기
       char data = reader.read();         // 더 이상 읽을 값이 없을 경우 -1리턴
  3. 파일 닫기
       reader.close()

◇ 한꺼번에 여러 문자 읽는 read()
     char arr[] = new char[50];  // 반드시 사용 전에 배열 생성
     int num = reader.read(arr);   // 읽은 문자 수만큼 리턴.   더 이상 읽을 값이 없을 경우 -1리턴


◇ 파일 쓰기
  1. 데이터를 쓰기 위한 파일 열기 
       FileWriter writer = new FileWriter("Plming.txt");
  2. 파일에 데이터 쓰기
       writer.write(ch);         // 더 이상 읽을 값이 없을 경우 -1리턴
  3. 파일 닫기
       writer.close()
◇ 한꺼번에 여러 문자 쓰는 writer()
     char arr[] = new char[50];  // 반드시 사용 전에 배열 생성
     arr에 문자열 넣는 구문
     writer.write(arr);  



바이트 스트림을 문자스트림으로, 문자스트림을 바이트 스트림으로
    InputStreamReader / OutputStreamWriter

◇ Node Stream만으로는 데이터의 파일 입출력이 원활하지 못하므로, 각각의 원하는 데이터 타입에 맞춰서 입출력을 손쉽게 할 수 있도록 Filter Stream을 Node Stream에 연결하여 사용한다.

 각 Fileter Stream은 기본데이터형(Primitive type)과 객체형(Object type)에 따라 나눠서 클래스가 정의되어 있다.
FileOutputStream FOS = new FileOutputStream(파일명);    // Node Stream 객체 생성
DataOutputStream out = new FileOutputStream(FOS);      
          // Node Stream객체를 생성자매개변수로 Filter Stream 객체를 생성.
or
DataOutputStream out = new DataOutputStream(new FileOutputStream(파일명));