capacity는 버퍼 자체가 요소를 저장할 수 있는 최대 개수인 반면, limit은 쓴만큼만 읽어야 하기 때문에 읽기에서 쓰기로 전환할 때 position의 값을 저장하는 역할을 한다.
ByteBuffer buffer1 = ByteBuffer.allocate(capacity);
capcity 크기의 메모리를 가진 array가 heap에 생성된다.
접근자인 buffer1 객체를 통하여 값을 읽거나 쓴다.
ByteBuffer buf = ByteBuffer.allocate(10);
buf.position(5);
buf.mark();
System.out.println("Position: " + buf.position() + ", limit: " + buf.limit());
byte[] b = new byte[15];
for(int i=0; i<b.length; i++) {
b[i] = (byte) i;
}
int size = buf.remaining();
if (b.length < size) {
size = b.length;
}
System.out.println("Position: " + buf.position() + ", limit: " + buf.limit());
buf.put(b, 0, size); //b의 0에서 size까지 읽어서 buf에 써라
System.out.println("Position: " + buf.position() + ", limit: " + buf.limit());
for(int i=0; i< size; i++) {
System.out.println("byte = " + buf.get());
}
buf의 limit(capaicity)를 넘어서서 데이터를 읽으려 시도하면 java.nio.BufferUnderflowException
이 발생합니다.
ByteBuffer buf = ByteBuffer.allocate(10);
buf.put(((byte) 0)).put((byte) 1).put((byte) 2).put((byte) 3).put((byte) 4);
buf.mark();
buf.put(((byte) 5)).put((byte) 6).put((byte) 7).put((byte) 8).put((byte) 9);
buf.reset();
byte[] b = new byte[15];
int size = buf.remaining();
if (b.length < size) {
size = b.length;
}
System.out.println("Position: " + buf.position() + ", limit: " + buf.limit());
buf.get(b, 0, size + 1); //b의 위치 0부터 size + 1까지 buf에서 읽어서 써라
System.out.println("Position: " + buf.position() + " limit: " + buf.limit());
for(int i=0; i < size; i++) {
System.out.println("byte = " + b[i]);
}
buffer의 capacity를 넘어서서 읽기를 시도할 경우 java.nio.BufferUnderflowException
이 발생합니다.
ByteBuffer buf = ByteBuffer.allocate(10);
buf.position(5);
buf.mark();
System.out.println("Position: " + buf.position() + ", limit: " + buf.limit());
byte[] b = new byte[15];
for(int i=0; i<b.length; i++) {
b[i] = (byte) i;
}
int size = buf.remaining();
if (b.length < size) {
size = b.length;
}
System.out.println("Position: " + buf.position() + ", limit: " + buf.limit());
buf.put(b, 0, size + 1); //b의 0에서 size + 1까지 읽어서 buf에 써라
System.out.println("Position: " + buf.position() + ", limit: " + buf.limit());
buf.reset();
for(int i=0; i< size; i++) {
System.out.println("byte = " + buf.get());
}
buf의 capacity를 넘어서서 byte를 쓰려고 하면 java.nio.BufferOverflowException
이 발생합니다.