OutputStream 클래스는 추상 클래스로 모든 바이트 출력 스트림의 최상위 클래스이다.

 

import java.io.OutputStream;

public class Ex05_OutputStream {

	public static void main(String[] args) {
		int data = 97;
		byte [] b = {65, 66, 67, 68, 69, 70};

		try {
			OutputStream os = System.out;
				// OutputStream : 출력 byte 스트림
			
			os.write(data); // 하위 1byte 출력
			System.out.println();
			
			os.write(b); // byte 배열 출력. ABCDEF
			System.out.println();
			
			os.write(b, 2, 3); // CDE. 2번째 인덱스에서 3개 출력
			System.out.println();
			
			System.out.write(b, 0, b.length); // off 인덱스로부터 len 개를 출력 장치로
			System.out.println();
			
			os.close();
			
			System.out.println("end..."); // 출력 안됨
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

os.write(data); 에서 data는 int형(4바이트) 이므로 1바이트씩 읽고 넘겨준다. 하위 1byte를 출력하는데 숫자 97를 문자로 읽어들이고 그 바이트값을 넘기면 ASCII코드의 97를 출력하게 된다. (a)

write(b); 에서 byte 배열인 B를 출력하면 1byte의 문자를 읽어들여 ASCII 코드 값을 반환하므로 ABCDEF.

 

OutputStream의 객체인 os 를 닫으면 close(); 마지막 end...는 출력되지 않는다. close()하면 바이트 입력 스트림을 닫고 사용하고 있던 시스템 자원들을 모두 반환한다.


import java.io.OutputStream;

public class Ex06_OutputStream {

	public static void main(String[] args) {
		try {
			OutputStream os = System.out;
			
			os.write(65); // 하위 1byte출력
						// 출력 버퍼에 출력되며 출력 버퍼가 차지 않으면 
						// 실제 출력 장치로 보내지 않음
			os.write(67);
			os.write(68);
			
			// 위내용 출력 방법
			// 1) 첫번째 방법
			os.flush(); // 출력 버퍼의 내용을 출력 장치로 보냄
			
			// 2) 두번째 방법
			// os.write(13);
			// os.write(10); // 이것만 해도 가능
			
			// 3) 세번째 방법
			// System.out.println(); // 위의 내용이 출력됨
			
			// 4) 네번째 방법
			// os.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

write(); 에 넣어준 문자는 바로 출력되지 않고 출력 버퍼에 저장되었다가 출력 버퍼가 차면 출력 장치로 보내준다.

따라서 출력 버퍼의 내용을 출력 장치로 보내는 flush() 메소드를 통해 모아뒀다가 출력할 수 있다.

 

두 번째 방법은 엔터(ASCII로 2byte)의 ASCII 값을 직접 입력 한 것이고, 세 번째 방법도 2번째와 비슷한 방식이다. 네 번째 방법은 바이트 입력 스트림을 닫고 자원을 반환하며 출력된다.

+ Recent posts