[Java] OutputStream의 정의와 종류
OutputStream
추상 클래스이며 바이트 기반 출력 스트림의 최상위 클래스입니다.
모든 바이트 기반의 출력 스트림 클래스들은 이 클래스를 상속받아 만들어집니다.
- FileOutputStream PrintStream BufferedOutputStream
- DateOutputStream
- ServletOutputStream
OutputStream 의 추상 메소드
여기서 나오는 예시 코드들의 new OutputStream은 예시입니다.
추상클래스는 인스턴스를 생성할 수 없습니다.
상황에 맞는 상속받은 클래스를 이용해 객체를 생성해야 합니다.
-
write( int b ) 매개 변수로 주어진 int 값에서 끝에 있는 1Byte만 출력 스트림으로 보냅니다.
매개 변수가 정수 타입이지만 4Byte를 모두 보내는 것은 아닙니다.
OutputStream outputStream = new OutputStream("파일 경로"); byte[] datas = "ABC".getBytes(); for( int i = 0; i< datas.length(); i++ ) { outputStream.write(datas[i]); }
- write( byte[] b )
매개값으로 주어진 바이트 배열의 모든 바이트를 출력 스트림으로 보냅니다.
OutputStream outputStream = new OutputStream("파일 경로"); byte[] datas = "ABC".getBytes(); outputStream.write(datas);
“ABC” 를 한번에 모두 출력합니다.
-
write( byte[] b, int off, int len ) b[off] 부터 len 개의 바이트를 출력 스트림으로 보냅니다.
OutputStream outputStream = new OutputStream("파일 경로"); byte[] datas = "ABC".getBytes(); outputStream.write(datas, 1,2);
“BC”만 출력
-
flush() 출력 스트림의 내부에는 작은 버퍼가 있습니다.
데이터가 출력되기 전에 버퍼에 쌓여 있다가, 순서대로 출력합니다
flush()는 버퍼에 남아있는 데이터를 모두 출력시키고, 버퍼를 비우는 역할을 합니다.
더 이상 출력할 데이턱 없다면 flush()를 마지막에 호출해 버퍼에 남아있는 데이터가 모두 출력 되도록 해야 합니다.
- close() OutputStream을 더 이상 사용하지 않는 다면 close()를 호출해 사용했던 시스템 자원을 풀어줘야 합니다.
ServletOutputStream
파일을 읽어올 때에는 FileInputStream으로 읽어온 뒤 브라우저에 출력할 때에는 ServletOutputStream을 사용한다.
ServletOutputStream의 용도는 게시판에 파일을 올릴 때 사용한다.
ServletOutputStream 은 추상클래스이기 때문에 인스턴스를 생성할 수 없다.
ServletResponse 클래스에 getOutputStream()이라는 함수를 통해 servletOutputStream 인스턴스를 받아서 사용해야한다.
// resp = HttpServletResponse의 객체
ServletOutputStream sos = resp.getOutputStream();
sos.write(쓰고자하는 데이터의 버퍼);
sos.flush();
sos.close();
댓글남기기