Java ByteBuffer



자바 NIO ByteBuffer는 바이트 데이터를 저장하고 읽는 저장소




내부 배열을 3가지 속성으로 관리한다.

(1)Capacity : 버퍼에 저장하는 최대 크기

(2)Position : 읽기 또는 쓰기가 작업 중인 위치

(3)Limit : 읽고 쓰는 버퍼의 최대 공간


 

생성에는 3가지 특징 : allocate , allocateDirect, wrap

(1)Allocate : jvm heap 영역에 생성.

(2)AllocateDirect : 운영체제의 커널 영역에 생성. ByteBuffer로만 생성할 수 있음.

(3)Wrap : 입력된 바이트 배열을 사용하여 바이트 버퍼를 생성.







Netty ByteBuf



Pure Java에서 Buffer와 그 하위 클래스들을 제공함에도 불구하고 네티에서는 자체적인 바이트 버퍼 API를 사용

 

특징

• 별도의 읽기 인덱스와 쓰기 인덱스

• flip 메서드 없이 읽기 쓰기 가능

• 가변 바이트 버퍼

• 프레임워크 레벨의 바이트 버퍼 풀 제공

• Java ByteBuffer와 호환됨

• 자료형에 따른 클래스를 제공하지 않고 별도의 method로 제공





Byte Buffer Pool


네티의 바이트버퍼의 특징은 바이트버퍼풀을 제공한다는 것이다. 이를 통해 생성된 바이트 버퍼를 재사용 할 수 있다.


•  다음은 풀링을 할 수 있는 버퍼를 생성하는 방법이다.


        PooledByteBufAllocator.DEFAULT.heapBuffer() 

         PooledByteBufAllocator.DEFAULT.directBuffer()


 

• 풀링을 하지 않는 버퍼 생성 방법.

        

        Unpooled.buffer(); 

         Unpooled.directBuffer();

 



바이트 버퍼 풀을 통해 매번 ByteBuf 메모리의 할당과 해제를 하지 않아도 됨.


 





















+ Recent posts