System.out.println("Hello, World");

Stream : 데이터의 흐름(통로)

Java.io 

① Input/Output class로 구분

② Node / Filter로 구분

③ Byte / Character 계열로 구분

ex)하나의 클래스가 Input/Node/byte 여러가지를 가질수 있다.


Node계열 : 연결시 목적인 Stream class

                연결이 목적이므로 입출력을 위한 기본 기능을 제공

Filter계열 : 기존의 Stream(연결된)이 읽고 쓰는 기능을 추가하는 class

          기능 추가가 목적이므로 연결 기능은 없다.

  -> Node로 연결하고 Filter로 기능 추가

Byte계열 : 1byte단위 입출력 처리하는 Stream

               binary code 입출력시 사용

Character 계열 :2byte 단위 입출력 처리시 Stream Class

                       Text 입출력시 사용


<패턴>

try{
1.연결- Node
        -기능추가 -> Filter
2. I/O(Input / Output)
}finally{
3. 연결끊기 -> 필터를 끊으면 Node도 같이 끊키게 된다.
}



 

 Input 계열

Outout 계열


Byte계열 

 character계열

 Byte계열

character계열

 최상위 class(추상)

 InputStream

Reader

OutputStream

Writer

 Node계열

 FileSteam

 FileReader

FileoutputStream 

FileWriter 

 Filter계열

 ObjectFileStream
DataInputStream

BufferedReader
InputStreamReader 

ObjectOutputStream 
DataOutputStream
PrintWriter

BufferedWriter
OutputStreamWriter
PrintWriter 

BufferedReader로 읽고 PrintWriter로 출력한다.

DataOutputStream은 primitive타입으로 출력한다.

또한 만약 Input의 Byte계열로 받을때에는 그 라인에 해당되는 계열만 사용할 수 있다. 또한 FileInputStream을 

FileInputStrema을 BufferedReader 뒤에 쓰고 싶을때에는 FileInputStream을 InputStreamReader로 변환시켜서 사용한다. FileOutputStream도 마찬가지다. 

Node계열 생성자의 인수 : 연결대상
Filter계열 생성자의 인수 : Stream class type, Reader/Writer, InputStream / OutputStream

<입력시>

InputStream
-
1byte로 입력 받음

InputStream의 메소드

read():int
읽어들인 Data를 int type의 공간의 마지막 1 byte에 저장
- EOF(파일의 마지막)을 만나면 -1을 return

read(byte[]):int
- 읽어들인 Data들을 byte[]에 꽉 찰때까지 넣은 후 1 byte씩 꺼내 저장함
- byte[]의 index를 return
EOF(파일의 마지막)을 만나면 -1을 return

Reader
- char(2 byte) 단위로 입력 받음

Reader의 메소드

read() : int
- 읽어들인 Data를 int type의 공간의 마지막 2 byte에 저장
- EOF(파일의 마지막)을 만나면 -1을 return


read(char[]) : int
- 읽어들인 Data들을 char[]에 꽉 찰때까지 넣은 후 char 문자 1개씩 꺼내 저장함
- char[]의 index를 return


<출력시>

- OutputStream
○byte계열

write(int) 
- 인수로 받은 byte를 출력

wirte(byte[])
- byte 배열내의 data들을 한번에 출력한다.

wirte(byte[],int Start Index, int length)
- byte 배열내의 data중 Start Index에서 length만큼의 data출력한다.

ex) byte[] b= new byte[50]{
write(b,5,10)
}
-> 5 ~ 14만큼의 출력한다.

- Writer
○character계열 

write(int)
-인수로 받은 char를 출력

write(char[])
-
char 배열내의 data들을 한번에 출력한다.

write(char[],int start index, int length)
- char 배열내의 data중 Start Index에서 length만큼의 data출력한다.

close() : 연결 끊는 서비스
in.read() : 읽은 data가 없으면 무한히 기다린다. I/O Blocking
flush() : 버퍼를 이용하는 Stream의 버퍼내 Data들을 강제 출력 처리한다.


<입출력 코딩 패턴>

File IO
- File과 연결하여 Input / Output을 하는 것
- File과 연결해야 하므로 생성자 호출시 String fileName1을 인수로 넘김
- 생성과 동시에 File과 연결이 됨

byte 단위

- FileInputStream
- FileOutputStream

char 단위

- FileReader
- FileWriter

생성자 : (String 파일명)
ex)FileWriter fw = new FileWriter("a.txt");

위와 같은 구문을 작성해서 실행하고, 생성되면 그 순간 Stream이 연결되어 출력 할 수 있게 된다.

Posted by 김마농