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 |
BufferedReader |
ObjectOutputStream |
BufferedWriter |
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이 연결되어 출력 할 수 있게 된다.