차곡차곡 성 쌓기
article thumbnail

ByteArrayOutputStream과 ByteBuffer는 모두 데이터를 저장하고 조작하는 데 사용되는 클래스이다. 그러나 사용 목적과 동작 방식에 차이가 있다.

 ByteArrayOutputStream

  • ByteArrayOutputStream은 Java의 java.io 패키지에 속하는 클래스로, 바이트 데이터를 메모리에 버퍼로 저장하는 역할을 한다.
  • 데이터를 쓰는 작업(Write)을 주로 수행 한다. 따라서 데이터를 추가하거나 쓸 때는 내부적으로 자동으로 크기가 조정된다. 버퍼의 크기가 부족할 경우 (현재 사이즈)* 2 방식으로 조정 된다. 이때 버퍼의 메모리는 새롭게 할당된다.
  • ByteArrayOutputStream에 데이터를 쓰는 경우, 버퍼에 데이터가 계속 추가되며, 필요한 시점에서 데이터를 가져올 수 있다.
  • 주로 I/O 작업에서 사용됩니다. 데이터를 파일, 네트워크 등으로 출력할 때 임시로 사용하거나 버퍼링하는 용도로 유용하다.
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
byteArrayOutputStream.write(someByteArray); // 데이터를 버퍼에 추가 
byte[] resultByteArray = byteArrayOutputStream.toByteArray(); // 버퍼에 있는 데이터를 바이트 배열로 가져옴

 

ByteBuffer

  • ByteBuffer는 Java의 java.nio 패키지에 속하는 클래스로, 바이트 데이터를 저장하고 조작하는 데 사용된다.
  • ByteBuffer는 네트워크 또는 파일 입출력, 메모리 맵 파일, 직접적인 메모리 접근고성능 데이터 처리에 사용된다.
  • 주로 직접 메모리 조작에 사용되며, 데이터를 읽고 쓸 때 포인터를 이동시키면서 접근하는 방식을 취한다.
  • ByteBuffer는 NIO(Non-blocking I/O)에서 사용되며, 데이터를 직접 메모리에 쓰고 읽는 데 효율적이다.
ByteBuffer byteBuffer = ByteBuffer.allocate(1024); // 1024바이트 크기의 버퍼 생성 
byteBuffer.put(someByteArray); // 데이터를 버퍼에 추가 byteBuffer.flip(); // 버퍼를 읽기 위해 읽기 모드로 전환 
byte[] resultByteArray = new byte[byteBuffer.remaining()]; 
byteBuffer.get(resultByteArray); // 버퍼에 있는 데이터를 바이트 배열로 가져옴

 

 

결론

ByteArrayOutputStream는 주로 I/O 작업에서 임시로 사용되거나 데이터를 메모리에 쌓아두는 데 사용되고, ByteBuffer는 데이터를 직접적으로 조작하거나 고성능 데이터 처리를 위해 사용된다. 

728x90
profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요" 해주세요!