개발 수업/JAVA

[Java] 입출력 스트림(Stream)/바이트 출력 스트림( OutputStream)

오늘 하루s 2023. 5. 25. 19:57
728x90
더보기

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파일이 생김

 

728x90