5.버퍼
데이터를 채널(Channel)로 전송하거나 채널에서 데이터를 수신할 때 사용되는 클래스,
기본형 타입들의 데이터를 담는 배열이며, 주로 바이트(Byte) 배열을 사용
→ ByteBuffer, CharBuffer, IntBuffer, FloatBuffer …
2.ByteBuffer
버퍼의 기본 속성은 다음과 같음
2-1. Limit
버퍼에 쓸 때는 얼마나 많은 데이터를 가질 수 있는 지를 가리키며, 버퍼에서 읽을 때는 데이터를 넣을 수 있는 방이 얼마나 많이 남아있는 지를 가리킴
2-2. Position
버퍼에서 다음 읽기 또는 쓰기 작업이 수행될 위치를 가리킴 → 얼마나 많은 데이터를 읽고 쓰는 지를 추적하는 역할
2-3. Capacity
버퍼에 저장할 수 있는 데이터의 최대 크기 limit은 capacity보다 클 수 없음
3. 버퍼의 동작 모드, Direct & Non-direct
버퍼는 크게 두 가지 방식으로 동작시킬 수 있음
3-1. Direct 모드
OS 레벨의 커널 버퍼에 직접 접근하여 IO 작업을 더 빠르게 처리할 수 있는 모드
JVM의 힙 메모리 밖에서 네이티브(Native) 연산을 통해 직접 메모리를 할당
allocateDirect()를 통해 Direct 모드로 생성 가능
Sample.java
ByteBuffer directBuffer = ByteBuffer.allocateDirect(1024);3-2. Non-direct 모드
JVM 힙 메모리 내에서 메모리를 할당, Direct Buffer보다 IO 작업 성능이 상대적으로 더 낮음
적은 양의 데이터를 처리할 때 활용
allocate()를 통해 Non-direct 모드로 생성 가능
Sample.java
ByteBuffer nonDirectBuffer = ByteBuffer.allocate(1024);Last updated on