-
[NIO.2]ByteBufferJAVA/NIO2 2014. 2. 4. 17:29728x90
버퍼는 근본적으로 데이터를 읽고 쓸 수 있는 배열이다.
Buffer 인터페이스는 ByteBuffer, ChrBuffer, IntBuffer, ShortBuffer, LongBuffer, FloatBuffer, DoubleBuffer 을 제공한다.
(보통 ByteBuffer 을 많이 사용한다.)
또한 ByteBuffer 을 생성시 allocateDirect 를 이용하면 다이렉트 버퍼(힙이 아닌 일반 메모리로 접근)로 만들수 있다.
ByteBuffer 속성
필수 요소
- Limit : 버퍼에 쓸 때 얼마나 많은 데이터를 가질 수 있는지를 가르킨다.
- Position : 얼마나 많은 데이터를 읽고 쓰는지 추적한다.
- Capacity : 버퍼에 저장할 수 이있는 데이터의 최대 크기를 가르킨다.
0 ≤ position ≤ limit ≤ capacity
옵션 요소
- Makr : reset() 메소드 호출시 버퍼의 초기화 될 위치를 가르킨다.
0 ≤ mark ≤ position ≤ limit ≤ capacity
ByteBuffer 주요 메소드
생성 방법
- 두 함수 모두 static 이고 int 값을 인자로 전달 받으며 버퍼의 크기를 지정한다.
- wrap 메소드를 사용하여 논 다이렉트 버퍼를 생성 가능하다.
allocate : 일반 버퍼 생성
allocateDirecct : 다이렉트 버퍼 생성
//일반 버퍼 생성 ByteBuffer normalBuffer1 = ByteBuffer.allocate(1024); //값이 채워진 buffer 만듥. ByteBuffer normalBuffer2 = ByteBuffer.wrap("TEST".getBytes()); //다이렉트 버퍼 생성 ByteBuffer memoryBuffer = ByteBuffer.allocateDirect(1024);
읽거나 쓰는 방법
- put으로 데이터를 쓰게 되면 position이 이동하고 limit까지 도달 가능
get : 데이터를 읽을때 사용
put : 데이터를 쓸때 사용
//읽기 ByteBuffer buffer1 = ByteBuffer.wrap(new byte[]{0x01, 0x02, 0x03, 0x04, 0x05, 0x06}); byte a = buffer1.get(); byte b = buffer1.get(); byte[] c = new byte[2]; buffer1.get(c); byte d = buffer1.get(); System.out.println(a+"/"+b+"/"+c[0]+","+c[1]+"/"+d); //쓰기 ByteBuffer buffer2 = ByteBuffer.allocate(1024); buffer2.put((byte)0x01); buffer2.put(new byte[] {0x02, 0x03}); buffer2.put((byte)0x04);
위치, 제한크기 변경 방법
- clear() : 위치값을 0으로 제한크기를 용량으로 변경해준다.
- flip() : 위치 값을 0으로 변경 해주고 제한 크기를 지금 위치값으로 변경 한다. mark 가 있을 경우 제거 한다.
- rewind() : position을 0으로 설정하고, mark를 제거한다.
- mark() : 현재 위치에 mark를 지정한다.
- reset() : mark로 이동한다.
참고자료 : http://download.java.net/jdk7/archive/b123/docs/api/java/nio/ByteBuffer.html?is-external=true
http://javacan.tistory.com/65
http://darksilber.tistory.com/entry/ByteBuffer-%EB%B0%94%EC%9D%B4%ED%8A%B8%EB%B2%84%ED%8D%BC
http://tjjava.blogspot.kr/2011/06/bytebuffer.html
728x90'JAVA > NIO2' 카테고리의 다른 글
[NIO.2]NetworkChannel (0) 2014.02.14 [NIO.2]FileChannel (0) 2014.02.05 [NIO.2]SeekableByteChannel (0) 2014.02.04 [NIO.2]File Store Attributes (0) 2013.12.30 [NIO.2]User-Defined File Attributes (0) 2013.12.30