[Java] 입출력 스트림(Stream)/바이트 출력 스트림( OutputStream)
Day20~21. 230525~26
입출력 스트림
스트림(Stream)?
- 데이터를 운반(입출력) 하는데 사용되는 연결통로
- 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것.
입출력 스트림의 종류
- 바이트 기반 스트림 : 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용
- 문자 기반 스트림 : 문자 데이터를 읽고 출력할 때 사용
구분 | 바이트 기반 | 문자 기반 스트림 | ||
입력 스트림 | 출력 스트림 | 입력 스트림 | 출력 스트림 | |
최상위 클래스 | InputStream | OutputStream | Reader | Writer |
하위 클래스 (예) |
XXXInputStream (FileInputStream) |
XXXOutputStream (FileOutputStream) |
XXXReader (FileReader) |
XXXWriter (FileWriter) |
바이트 출력 스트림 : OutputStream
- OutputStream은 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스이다.
- 모든 바이트 기반 출력 스트림 클래스는 OutputStream 클래스를 상속받아 만들어짐.
- FileOutputStream, PrintStream, BufferedOutStream, DateOutputStream 클래스는 모두 OutputStream 클래스를 상속하고 있음.
- OutputStream의 주요 메소드
write(int b) 메소드
write(int b) 메소드는 매개 변수로 주어진 int(4byte)에서 끝의 1byte만 출력 스트림으로 보냄.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package chap14;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Write01 {
public static void main(String[] args) throws IOException {
// 1byte씩 출력
OutputStream os = new FileOutputStream("C:\\javaStudy\\test.db");
byte a = 10;
byte b = 20;
byte c = 30;
os.write(a);
os.write(b);
os.write(c);
os.flush();
os.close();
}
}
|
cs |
* 실행 결과
=> javaStudy에 test.db파일이 생김
15~17 라인은 write() 메소드로 1byte씩 세 번 출력하는 코드.
19라인은 출력 스트림은 출력할 바이트로 바로 보내는 것이 아닌 내부 버퍼(저장소)에 우선 저장해놓음.
flush() 메소드는 이 내부 버퍼에 잔류된 바이트를 모두 출력하는 역할.
20라인은 OutputStream을 더 이상 사용하지 않겠다는 의미로 close() 메소드를 호출.
write(byte[] b) 메소드
매개값으로 주어진 배열의 모든 바이트를 출력 스트림으로 보냄.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package chap14;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Write01 {
public static void main(String[] args) throws IOException {
// byte배열 전체 출력(p596)-write(byte[])
OutputStream os2 = new FileOutputStream("C:\\javaStudy\\test2.db");
byte[] array = {10,20,30};
os2.write(array);
os2.flush();
os2.close();
}
}
|
cs |
* 실행 결과
=> javaStudy에 test2.db파일이 생김
write(byte[] b, int off, int len) 메소드
write(byte[],int 시작인덱스,int 개수)
b[off]부터 len개의 바이트를 출력 스트림으로 보냄.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package chap14;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Write01 {
public static void main(String[] args) throws IOException {
// byte배열 일부 출력(p596)-write(byte[],int 시작인덱스,int 개수)
OutputStream os3 = new FileOutputStream("C:\\javaStudy\\test3.db");
byte[] array3 = {100,110,120,122,124};
os3.write(array3,0,array3.length); //인덱스0부터 배열끝까지=>배열전체
os3.flush();
os3.close();
}
}
|
cs |
* 실행 결과
=> javaStudy에 test3.db파일이 생김