ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NIO.2]ByteBuffer
    JAVA/NIO2 2014. 2. 4. 17:29


    버퍼는 근본적으로 데이터를 읽고 쓸 수 있는 배열이다.


    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

    '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
Designed by Tistory.