ByteBuffer 사용법



ByteBuffer 사용법에 대해 알아보겠다. 이렇게 ByteBuffer를 자세히 설명하는 이유는 java에서 NIO를 이용하기 위해서다. 보통 자바가 C에 비에 느린 이유중 하나가 IO가 JVM 내부에 IO버퍼를 두었기 때문이다. 


ByteBuffer 초기화와 사용법



[전체 예제]

import java.nio.ByteBuffer;


public class NioBuffer1 {


public static void main(String[] args) {

ByteBuffer buf = ByteBuffer.allocate(10);

System.out.println("position[" + buf.position() +"] Limit["+ buf.limit()+"] Capacity["+buf.capacity()+"]" );

buf.mark(); //나중에 찾아 오기 위해 현재 위치를 지정해 둔다. (현재 위치는 0 )

//순차적으로 데이터 넣기 -> 데이터를 넣을 때 마다 position이 바뀐다.

buf.put((byte)10);

System.out.println("put result -> position[" + buf.position() +"]");


buf.put((byte)11);

System.out.println("put result -> position[" + buf.position() +"]");

buf.put((byte)12);

System.out.println("put result -> position[" + buf.position() +"]");

//mark 해 두었던 위치로 이동

buf.reset();

System.out.println("put reset -> position[" + buf.position() +"]");

System.out.println("");

System.out.println("데이터 들어간 결과 확인");

//데이터를 get 할 때 마다 position이 바뀐다.

for( int i = 0 ; i < 5 ; i++ ) {

System.out.println("position[" + buf.position() +"] value["+ buf.get() + "]");

}

//지정한 위치에 데이터에 넣기

buf.put(2, (byte)22);

buf.put(3, (byte)23);

buf.put(4, (byte)24);

System.out.println("");

System.out.println("데이터 들어간 결과 확인");

for( int i = 0 ; i < 5 ; i++ ) {

System.out.println("position[" + i +"] value["+ buf.get(i) + "]");

}

}

}


[실행 결과]

position[0] Limit[10] Capacity[10]

put result -> position[1]

put result -> position[2]

put result -> position[3]

put reset -> position[0]


데이터 들어간 결과 확인

position[0] value[10]

position[1] value[11]

position[2] value[12]

position[3] value[0]

position[4] value[0]


데이터 들어간 결과 확인

position[0] value[10]

position[1] value[11]

position[2] value[22]

position[3] value[23]

position[4] value[24]


[메모리 크기 설정 및 초기화 된 값 확인]

10자리 byte 만큼 메모리 공간 확보

ByteBuffer buf = ByteBuffer.allocate(10);

System.out.println("position[" + buf.position() +"] Limit["+ buf.limit()+"] Capacity["+buf.capacity()+"]" );


[순차적으로 데이터 넣기]

position 0~2까지 순차적으로 데이터가 10, 11, 12를 넣는다. 이때 position의 위치도 바뀐다.

buf.put((byte)10);

System.out.println("put result -> position[" + buf.position() +"]");


buf.put((byte)11);

System.out.println("put result -> position[" + buf.position() +"]");

buf.put((byte)12);

System.out.println("put result -> position[" + buf.position() +"]");


[순차적으로 데이터 빼기]

position 0~4까지 순차적으로 데이터가 뺀다. 이때 position의 위치도 바뀐다.

for( int i = 0 ; i < 5 ; i++ ) {

System.out.println("position[" + buf.position() +"] value["+ buf.get() + "]");

}


[특정 위치에 데이터 넣기]

position 2에는 22, 3에는 23, 4에는 24를 넣는다. 

buf.put(2, (byte)22);

buf.put(3, (byte)23);

buf.put(4, (byte)24);


[특정 위치에 데이터 빼기]

position 0~4까지 데이터가 뺀다. 

for( int i = 0 ; i < 5 ; i++ ) {

System.out.println("position[" + i +"] value["+ buf.get(i) + "]");

}


반응형

+ Recent posts