1. 스트림 (Stream)
  (1) 설명 : 데이터의 흐름
 
  (2) 흐름의 예
 Source (Keyboard, File, DataBase, WebPage)
   │
   │ -> 데이터의 흐름(Stream)   
   ↓ 
 Destination (Monitor, File, WebPage, DataBase....)

  (3) 표준 입력 / 출력 스트림
 * Stream은 상대적 (기준에 따라 Source, Destination 이 달라진다.)
 (두뇌) -----> 키보드 -----> 모니터 -----> (눈) -----> (두뇌)
                  (System.in)   (System.out)

  (4) 특징
 <1> FIFO (First In Firts Out)
  -> 흘러가는 데이터의 순서가 바뀔 수 없다.

 <2> 단방향 : 흐름의 방향은 일정하다.

 <3> 지연성 : 스트림(흐름)은 지연될 수 있다. (ex: 커서의 깜빡임...)

 <4> 유연한구조 : 다른 Stream(FilterStream)과 연결해서 쓸 수 있다.
   ex) new BufferedReader(new InputStreamReader(System.in))
 
  (5) 구분 (IO.jpg 참조)
 <1> by byte 수 기준
   [1] 1byte Stream (바이트 스트림 - 음악, 동영상, 그림....)
  (ex: XXXInputStream, XXXOutputStream)
   [2] 2byte Stream (문자 스트림 - 자바에서만 지원)
  (ex: XXXReader, XXXWriter)

 <2> by 입력/출력 기준
   [1] 입력 스트림 : InputStream / Reader
   [2] 출력 스트림 : OutputStream / Writer

 <3> by 기능 기준
   [1] Node Stream : Source or Destination 에 직접 연결된 Stream
  (ex: 수도 꼭지..)
   [2] Bridge Stream : 1byte Stream을 2byte Stream으로 변환하는 스트림
  (ex: Connecting Union - 연결매체)
   [3] Filter Stream : Node Stream을 사용하기에 알맞게 가공한 스트림
  (ex: 샤워기 - 독특한 기능(메소드, 필드)을 가지고 있다)

2. Node Stream (근본 스트림)
  (1) 설명
 Data Source(원천지, 근본지) 또는 Data Destination(목적지)와 직접 연결된 스트림
 
  (2) 종류
 <1> InputStream
   [1] 1byte 입력 스트림의 조상
   [2] 추상클래스이기 때문에 System.in 이나 하위 클래스를 형변환해서 생성
   [3] - read() - 아스키값 리턴
    - read(byte[] b) - 읽은 바이트의 총갯수
    - read(byte[] b, int off, int len) -
   [4] close();
   (ex: 001day/IO1~3.java)

 <2> OutputStream
   [1] 1byte 출력 스트림의 조상
   [2] 추상클래스이기 때문에 System.out 이나 하위 클래스를 형변환해서 생성
   [3] - write(byte[] b) - 아스키값을 char로 출력
    - write(byte[] b, int off, int len) - 배열값 시작부터 원하는 길이만큼 출력
    - write(int b) - 해당 인트값(아스키값)에 대한 char를 출력
   [4] flush(), close()
   (ex: 001day/IO4.java)


   cf) InputStream 과 OutputStream 사용 출력시 어떤 read()와 어떤 Write를 쓰는것이 효율적일까?
    - Ans : 일반적으로 read(byte[] b)로 읽고, write(byte[] b, int off, int len)로 출력!!
   (ex: 001day/IO5.java)

 <3> FileInputStream
   [1] 파일에서 읽는 스트림
   [2] InputStream 의 자식 클래스
   [3] 생성자 3개
   (ex: 001day/IO6.java, [Source-파일][Destination-모니터])

 <4> FileOutputStream
   [1] 파일에 쓰는 스트림
   [2] OutputStream 의 자식 클래스
   [3] 생성자 5개
   (ex1: 001day/IO7.java, [Source-키보드][Destination-파일]) 


   (ex2: 001day/IO8.java, [Source-파일][Destination-파일]) 
   (ex3: 001day/IO9.java, 파일경로 입력받아서 파일복사) 
   (ex4: 001day/IO10.java, 잘라내기로 복사) 

 <5> Reader
   int read()
   int read(char[] cbuf)
   abstract int read(char[] cbuf, int off, int len)
   int read(CharBuffer target)

   cf) 완성형, 조합형, 공백은 각각 1개의 문자로 간주
    Enter는 2개의 문자(10,13)로 간주..
   (ex: 002day/IO11.java)

 <6> Writer
   write(char[] cbuf)
   write(char[] cbuf, int off, int len)
   write(int c)
   write(String str)
   write(String str, int off, int len) 

 <7> FileReader
   (ex: 002day/IO15.java)

 <8> FileWriter
   (ex: 002day/IO16.java)

Posted by Duritz

공지사항

Yesterday
Today
Total
05-18 14:19

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31