판봉 개발 일기

바이트 출력 스트림 : OutputStream 본문

자바 복습

바이트 출력 스트림 : OutputStream

판봉 2021. 7. 14. 13:17
728x90

모든 바이트 기반 출력 스트림 클래스는 OutputStream 클래스를 상속받아서 만들어진다고 합니다.

다음 표는 OutputStream 클래스에서 주로 사용하는 메소드를 나타낸 것입니다.

리턴 타입 메소드 설명
void write(int b) 1byte를 출력
void write(byte[] b) 매개값으로 주어진 배열 b의
모든 바이트를 출력
void write(byte[] b, int off, int len) 매개값으로 주어진 배열 b[off]부터
len개까지의 바이트를 출력
void flush() 출력 버퍼에 잔류하는 
모든 바이트를 출력
void close() 출력 스트림을 닫음

write(int b) 메소드는 매개 변수로 주어지는 int(4byte)에서 끝 1byte만 출력 스트림으로 보냅니다.

주의 할점은 4byte 모두를 보내는 것은 아닙니다.

 

다음 코드는 write(int b) 메소드를 사용한 것입니다.

import java.io.FileOutputStream; // java.io에서 가져온다는 점을 명심하자
import java.io.OutputStream;

public class WriteExample {
	public static void main(String[] args) throws Exception {
    OutputStream os = new FileOutputStream("C:/Temp/test1.db");
    
    byte a = 10;
    byte b = 20;
    byte c = 30;
    
    os.write(a);
    os.write(b);
    os.write(c); // 이 3가지는 1byte씩 출력하는 것이다.
    
    os.flush(); // 출력 버퍼에 잔류하는 모든 바이트를 출력
    os.close(); // 출력 스트림을 닫음
    }
}

출력 스트림은 출력할 바이트를 바로 보내는 것이 아닙니다.

내부 버퍼에 우선 저장을 해놓습니다.

위의 코드에 있는 flush() 메소드는 내부 버퍼에 잔류하는 바이트를 모두 출력하는 역할을 합니다.

버퍼의 내용을 후에 서술 하겠습니다.


write(byte[] b) 메소드는 매개값으로 주어진 배열의 "모든" 바이트를 출력 스트림으로 보냅니다.

다음 코드를 한번 살펴보겠습니다.

import java.io.FileOutputStream;
import java.io.OutputStream;

public class WriteExample {
	public static void main(String[] args) throws Exception {
    	OutputStream os = new FileOutputStream("C:/Temp/test2.db");
        
        byte[] array = { 10, 20, 30 };
        
        os.write(array); // 배열의 모든 바이트를 출력합니다.
        
        os.flush(); // 출력 버퍼에 잔류하는 모든 바이트를 출력
        os.close();// 출력 스트림을 닫습니다.
    }
}

write(byte[] b ,int off, int len) 메소드는 b[off]부터 len개의 바이트를 출력 스트림으로 보냅니다.

다음 코드를 한번 살펴보겠습니다.

import java.io.FileOutputStream;
import java.io.OutputStream;

public class WriteExample {
	public static void main(String[] args) throws Exception {
    OutputStream os = new FileOutputStream("C:/Temp/test3.db");
    
    byte[] array = { 10, 20, 30, 40, 50 };
    
    os.write(array, 1, 3); //배열의 1번 인덱스부터 3개까지 출력
    
    os.flush();
    os.close();
    }
}

아마 바이트 기반 출력 스트림 중에서는

write(byte[] b, int off, int len).을 많이 쓸 것같다.

왜냐하면 시작 인덱스와 개수를 정할 수있어서 꽤나 매력적인 메소드로 느껴졌다.

'자바 복습' 카테고리의 다른 글

문자 출력 스트림 : Writer  (0) 2021.07.14
바이트 입력 스트림 : InputStream  (0) 2021.07.14
입출력 스트림  (3) 2021.07.14
FIFO 컬렉션과 Queue 인터페이스  (2) 2021.07.14
LIFO 컬렉션과 Stack 클래스  (0) 2021.07.14