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는 데이터를 직접적으로 조작하거나 고성능 데이터 처리를 위해 사용된다.
'IT 정보' 카테고리의 다른 글
무상태 (stateless) 웹 계층 (0) | 2024.12.02 |
---|---|
macOS에서 파이썬 가상환경 만들기 (0) | 2024.05.09 |
NVIDIA AI칩, 우위 유지하는 이유 (0) | 2024.03.18 |
주가 1000% 오른 '슈퍼마이크로', AI 서버 (0) | 2024.03.16 |
Discovery Protocol (탐색 프로토콜) (0) | 2022.12.23 |