Skip to Content
Suffering builds character
아카이브23.스프링 웹플럭스Java NIO, 네티논블로킹 소켓5.버퍼

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