JAVA ioStream
파일 입력/출력(IO)
스트림은 First In, First Out(fifo)구조를 통함
(선입선출법)
자바프로그램
현재 프로그래머가 작성중인 자바 프로그램
| 입력 ← inputstream | 장치
-키보드 -마우스 -메모리 -프린터 -파일 -DB 등 |
출력 → outputstream |
스트림의 종류
1. 전송되는 데이터의 크기로 분류
- 바이트스트림 : 1바이트 전송 : 멀티미디어 파일 등에 사용 ~Stream으로 끝남
- 문자스트림 : 2바이트 전송 : 텍스트파일에 사용 ~er로 끝남
2. 특별한 기능을 갖는 스트림 여부
- 장치와 직접적으로 연결이 되는지 여부에 따라 나뉨
- 노드스트림 : 장치와 직접적으로 연결되는 스트림
- 필터스트림 : 장치와 직접적으로 연결하면 안 됨. 특별한 기능을 가지고 있음
범주 | 클래스명 | 설명 | 기타 |
byte스트림 | InputStream | 입력에 관한 부모클래스 |
|
OutputStream | 출력에 관한 부모클래스 |
| |
문자 스트림 | Reader | 입력에 관한 부모클래스 |
|
Writer | 출력에 관한 부모클래스 |
|
바이트스트림별 사용시기
필터스트림 | 좀 더 빠른 속도를 위해서 ex) 일반 스트림의 속도를 더 빠르게 함 |
데이터스트림 | 특정 데이터를 전달하기 위해서 ex) 특정 데이터값(int, float, String등)을 전달 |
오브젝트스트림 | 특정 오브젝트를 전달하기 위해서 ex) 특정 오브젝트(Dog클래스 등의 클래스 내용을 전달함) ex2) new Dog("D001", "name", 3); 의 전달도 가능 |
일반적인 경우
자바프로그램 | ← | car.jpg |
→ | cpcar.jpg |
필터스트림의 사용
자바프로그램 | ← 필터스트림 | ← 노드스트림 | car.jpg |
→ 필터스트림 | → 노드스트림 | cpcar.jpg | |
InputStream in = null; | |||
in = new FileInputStream("c:\\car.jpg"); | |||
필터스트림은 '항상' 노드스트림보다 먼저 close(); 되어야 함.
자바 프로그램에서 가까운쪽의 스트림부터 제거해나가야 함.
입/출력은 자바프로그램에서 가까운 쪽을 이용해서 사용함.
데이터스트림의 사용
자바프로그램 | ← 데이터 인풋 스트림 | ← 노드스트림 | a.txt |
→ 데이터 아웃풋 스트림 | → 노드스트림 | a.txt | |
OutputStream out = null; | |||
InputStream in = null; | |||
인풋스트림리더의 사용
자바프로그램 | ← 버퍼드스트림 | ← 인풋스트림리더 | ← 노드스트림 | memo.txt |
InputStream in = null; | ||||
오브젝트스트림의 사용
자바프로그램 | → 오브젝트스트림 | → 노드스트림 |
|
자바프로그램 | ← 오브젝트스트림 | ← 노드스트림 |
|
OutputStream out = null; | |||
InputStream in = null; | |||
문자스트림의 사용
자바프로그램 | → 노드스트림 | go.txt | |
← 노드스트림 | go.txt | ||
Writer out = null; } | |||
out.write(System.getProperty("line.separator"));
는 줄바꿈을 만드는 코드이다.
이는 ("\r\n");역시 마찬가지이나, 위의 것이 모든 운영체제에서 작동한다.
out.flush();
는 문자스트림에서 인풋과 아웃풋을 하나에서 같이 사용할 때, 꼭 사용해야 하는 메소드이다.
문자스트림 bufferedWriter의 사용
자바프로그램 | → 버퍼드라이터 | → 노드스트림 | must.txt |
자바프로그램 | ← 버퍼드리더 | ← 노드스트림 | must.txt |
Writer out = null; | |||
ioStream 기본 작성법
InputStream in = null; OutputStream out = null; |
try~catch문 작성 |
첫번째 try~catch문에 finally 추가 |
finally에 try~catch문 추가 |
finally내부 try~catch문에 if문을 사용 if(in != null) { |
첫번째 try에 해야 할 작업을 입력 |
팁.
System.currentTimeMillis();은
1970년 1월 1일 0시 0분 0초 000을 0으로 가정함.
1970년 1월 1일 0시 0분 0초 001은 1이 됨
팁.
중요한 값이기에 io스트림 사용을 막고 싶다면, transient를 사용하면 된다.
ex) private transient int age;
팁.
c:\\memo.txt
는
"c:"+file.separator+"memo.txt"처럼 넣어주는 것이 호환성에 좋다.
file.separator 는 \\와 같은 기능을 한다.