천사소녀 네티 6장

일지 2016. 2. 17. 07:57

네티 6장

자바 NIO 바이트 버퍼: 바이트 데이터를 저장하고 읽는 저장소, 배열을 가지고 읽쓰를 추상화한 메서드를 가지고 있음. 


종류

- ByteBuffer

- CharBuffer

- InteBuffer

- ShortBuffer

- LongBuffer

- FloatBuffer

- DoubleBuffer


 속성  


* capacity: 버퍼에 저장할 수 있는 데이터의 최대 크기. 변경 불가능-

* position : 읽.쓰가 작업 중인 위치. 버퍼 객체가 생성될 때 0으로 초기화되고 get/put 호출되면 증가함. 당연히 capacity와 limit 사이의 값

- flip 메소드를 사용한 후 position이 0이 된다. 

* limit : 버퍼에 저장할 수 있는 공간의 최대치 . capacity보다 작음. (공간의 최대치라고 생각했는데 포인터처럼 11을 가리키고 있는 예시가 있다. 정확한 의미를 모르겠다.)

- flip메소드를 사용한 이후, position값으로 이동한다. 즉, 마지막으로 데이터가 기록된 위치가 됨


** flip 메소드를 사용해서 읽-> 쓰 / 쓰-> 읽 으로 작업 전환이 가능함. 


*  생성

- 팩토리 메소드를 사용해서 생성

- allocate: 힙에 바이트 버퍼를 생성.

- 힙 버퍼: 생성은 빠르지만 읽쓰가 느리다

- allocateDirect: 운영체제의 커널 영역에 생성(다이렉트 버퍼)

- 다이렉트 버퍼: 생성시간은 길지만 빠르다

- wrap: 입력된 바이트 배열을 사용해서 바이트 버퍼를 생성. (힙 버퍼)




<네티 바이트 버퍼>

- 각각의 배열 type에 대한 read~(type) / write~(type)을 지원. 


- readerIndex:

- writeIndex: 

읽쓰가 인덱스를 각각 가지고 잇어서 flip이 필요하지 않음. 

- capacity



* 네티 바이트 버퍼는 풀을 제공한다. 

- ByteBufAllocator 인터페이스를 사용, 하위 추상 구현체를 이용해서 바이트 버퍼를 생성한다. 


* 풀링을 사용할지 

* 힙버퍼를 쓸지 다이렉트 버퍼를 쓸지 

선택할 수 있다. 그래서 2^2 = 4가지 바이트 버퍼 속성이 나온다. 


각각의 속성에 따라 바이트 버퍼를 생성할 때 사용하는 메소드 종류가 다르다. 


* 표 정리 


- 바이트 버퍼의 크기를 할당하지 않으면 256바이트가 생성된다. 

- 네티 바이트 버퍼의 크기는 줄였다 늘렸다 할 수 있다. buffer.capacity(int )로 크기를 조정. 



<바이트 버퍼 풀링>

장점

- 버퍼를 할당 해제 하면서 일어나는 GC감소


* release method

- 해당 버퍼에 대한 참조를 --;

*retain method

- 해당 버퍼에 대한 참조를 ++



<음수 입력시 >


- 음수 입력이 들어오면 데이터를 큰 데이터 타입으로 변환해서 리턴한다. 


<빅엔디안 사용>


























'일지' 카테고리의 다른 글

intelliJ에서 live template 생성할 때 유의해야 하는 점들 정리  (0) 2016.02.23
git remote branch delete  (0) 2016.02.19
천사소녀 네티 2  (0) 2016.02.11
천사소녀 네티  (0) 2016.02.10
nerd commenter  (0) 2016.01.28
Posted by 썬,더 호글
,