개발 공부 기록하기/01. JAVA & Kotlin

Java OutputStream이란?

lannstark 2020. 9. 1. 09:16

InputStream 링크 : lannstark.tistory.com/34

 

Java InputStream이란?

InputStream OutputStream을 실무에서 사용할 때면, 뭔가 알긴 알고 실제로 둘을 활용해 기능을 구현하는데는 전혀 문제가 없지만, 사용할때마다 찾아보게되고 뭔가 정확히 아는 것 같지는 않다라는 느

lannstark.tistory.com

 

OutputStream의 정의

OutputStream 추상 클래스는 데이터가 나가는 통로의 역할에 관해 규정하고 있는 추상 클래스이다.

InputStream을 한 번 봤기 때문에 쉽게 이해할 수 있다.. 반대되는 개념이겠거니...

OutputStream 주요 메소드

그럼 이제 데이터가 나가는 통로는 어떤 역할을 수행해야 하는지 주요 메소드를 알아보자!

OuputStream은 쓸 수 있어야 한다

파일로 보내건, 메모리로 보내건, 네트워크로 보내건 통로로 데이터를 내부내는 기능이 필요하다!
데이터를 쓰는 기능과 관련된 메소드는 3개가 있다.

/**
 * b를 OutputStream으로 내보낸다
 */
public abstract void write(int b) throws IOException;

// Main method : ByteArrayOutputStream은 Byte Array'로' 내보내는 통로이다
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
outputStream.write(1); // outpustream에는 [1]이 들어있다
outputStream.write(2000); // outputStream에는 [1, -48]이 들어있다
/**
 * byte 배열 b를 OutputStream으로 내보낸다
 */
public void write(byte b[]) throws IOException;

// Main method
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
outputStream.write(new byte[]{1, 2}); // outpustream에는 [1, 2]이 들어있다
/**
 * byte 배열 b를 off부터 len만큼 OutputStream으로 내보낸다
 */
public void write(byte b[], int off, int len) throws IOException;

OutputStream은 버퍼를 비울 수 있다

/**
 * 버퍼가 존재하는 경우, 해당 버퍼에서 데이터를 모두 목적지로 보내는 역할을 수행한다
 * ByteArrayOutputStream의 경우 버퍼가 없어 아무런 영향이 없다
 */
public void flush() throws IOException { }

flush라는 단어로 OutputStream의 flush를 정확히 예측한 그가 있었으니,,,

OutputStream은 닫을 수 있다

통로를 부실 수 있는 것이다

public void close() throws IOException;

정리하면

OutputStream이 InputStream보다 훨씬 간단하네요 ㅎㅎㅎ

OutputStream이 갖춰야 할 덕목으로는

  • 데이터 쓰기
  • 버퍼 비우기
  • 통로 끊기

가 있다! (물론 하위 구현체마다 지원하지 않는 덕목이 있을 수 있다)

끝!