2015년 1월 14일 수요일

ByteArrayOutputStream 사용

먼저 outputstream 이니 개념부터 보는 것이 좋다( 링크 - 입출력 스트림의 개념 )

ByteArrayOutputStream는 실질적으로 저장소로 사용된다

즉, 바이트 배열 저장소나 다름없다

byte[]에 저장하지 않고 번거롭게 저기다가 저장하는 것일까
사실은 ByteArrayOutputStream 역시 byte[]에 저장한다
내부적으로 byte[]에 저장하고 그걸 새로운 데이터가 들어올때마다
다시 확장하고 카피하고 하는 byte[]를 편리하게 쓰기 위한 유틸인 것이다

그냥 String 처럼 기본적이고 깔끔하게 만들면 안될까?

byte배열의 경우 금방쓰고 버리고 하는 빈도가 높기때문에
GC(garbage collection)이 자주 작동하게 되고 성능에 영향을 준다

그렇기때문에 좀더 효율적인 것을 만들게 된 것이다
그래서 나온것이 ByteBufferByteArrayOutputStream이다
이 중 ByteArrayOutputStream은 정확한 길이를 모를때 효과적이다

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    InputStream in = connection.getInputStream();

    int byteRead = 0;
    //inpustream가 한번에 가능한 최대치만큼 설정
    byte[] buffer = new byte[in.available()];  
    while((byteRead = in.read(buffer))>0){
       out.write(buffer, 0, byteRead);
    }
    out.close();
    return out.toByteArray();

참고로 ByteArrayOutputStream의 close()와 flush() 메서드는
아무런 구현이 되어 있지 않다. 엄밀하게 말해서 사실상 stream하곤 관계없으니 말이다

Written with StackEdit.

0 개의 댓글 :

댓글 쓰기