clear: 버퍼를 지우는건 아니지만 의미상 지우고 새로 쓴다.
flip: write 상태에서 버퍼를 읽으려고 준비하는 것
public static void main(String[] args) {
// TODO Auto-generated method stub
ByteBuffer buf = ByteBuffer.allocate(16);
int i=0;
while (buf.hasRemaining()) {
buf.put((byte)i);
i++;
}
buf.flip(); //limit -> position, position -> 0 => 읽을 준비
System.out.println(buf);
showBuffer(buf, "int");
showBuffer(buf, "char");
showBuffer(buf, "float");
showBuffer(buf, "long");
}
public static void showBuffer(ByteBuffer buf, String type) {
if(type.equals("int")) {
while(buf.hasRemaining()) {
System.out.println(buf.getInt());
}
buf.flip();
}
else if(type.equals("char")) {
while(buf.hasRemaining()) {
System.out.println(buf.getChar());
}
buf.flip();
}
else if(type.equals("float")) {
while(buf.hasRemaining()) {
System.out.println(buf.getFloat());
}
buf.flip();
}
else if(type.equals("long")) {
while(buf.hasRemaining()) {
System.out.println(buf.getLong());
}
buf.flip();
}
}
int의 경우 한 데이터 당 4byte를 차지하므로 쓸 때는 byte로 바꾼 16개의 숫자를 쓰고 읽을 때 4개의 숫자를 읽는다.
char의 경우 한 데이터 당 2byte를 차지하므로 쓸 때는 byte로 바꾼 16개의 숫자를 쓰고 읽을 때 8개의 숫자를 읽는다.
float, long도 마찬가지이다.
int로 읽고 쓸 때 첫번째 숫자는 다음과 같이 만들어졌다.
00000000 - 00000001 - 00000010 - 00000011
= 2^16 + 2 * 2^8 + 3
= 65536 + 512 + 3 = 66051
ByteBuffer buffer = ByteBuffer.allocate(4);
IntBuffer view = buffer.asIntBuffer();