네티 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 |