2010. 4. 28. 10:43 Program.../Java Language
자바를 배워보자 Java IO (1)
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)
'Program... > Java Language' 카테고리의 다른 글
자바를 배워보자 Java IO (3) (0) | 2010.04.28 |
---|---|
자바를 배워보자 Java IO (2) (0) | 2010.04.28 |
자바를 배워보자 Java Begin (6) - JDBC (0) | 2010.04.28 |
자바를 배워보자 Java Begin (5) (0) | 2010.04.28 |
자바로 Swing계산기 만들기 (0) | 2010.04.28 |