Java NIO-버퍼
Java NIO의 버퍼는 버퍼가 채널에 대한 엔드 포인트 역할을하도록 채널에 데이터를 쓰거나 채널에서 데이터를 읽는 데 사용할 수있는 고정 된 크기의 데이터 청크 컨테이너 역할을하는 단순한 객체로 취급 될 수 있습니다.
채널에서 데이터를 읽고 쓰기 위해 메모리 블록을보다 편리하게 처리 할 수있는 일련의 방법을 제공합니다.
버퍼는 IO 데이터가 데이터의 비동기 및 동시 흐름을 지원하지 않는 스트림 형태로 처리되는 경우 기존 IO에 비해 NIO 패키지를 더 효율적이고 빠르게 만듭니다. 또한 IO는 청크 또는 바이트 그룹의 데이터 실행을 허용하지 않습니다. .
Java NIO 버퍼를 정의하는 기본 매개 변수는 다음과 같이 정의 할 수 있습니다.
Capacity − 버퍼에 저장할 수있는 데이터 / 바이트의 최대량 버퍼의 용량은 변경할 수 없으며 버퍼가 가득 차면 쓰기 전에 지워야합니다.
Limit − Limit는 Buffer의 모드에 따라 의미가 있습니다. 즉, Buffer Limit의 쓰기 모드에서 버퍼에 쓸 수있는 최대 데이터를 의미하는 용량과 같으며, 읽기 모드에서는 버퍼에 쓸 수있는 데이터의 한계를 의미합니다. 버퍼에서 읽습니다.
Position − buffer 내 커서의 현재 위치를 가리키며, 처음에는 buffer 생성시 0으로 설정되거나, 즉 get () 및 put ()에 의해 자동으로 업데이트되는 읽거나 쓸 다음 요소의 인덱스입니다. ) 방법.
Mark − 버퍼에있는 위치의 북마크를 표시하고, mark () 메서드를 호출하면 현재 위치를 기록하고 reset ()을 호출하면 표시된 위치를 복원합니다.
버퍼 유형
Java NIO 버퍼는 버퍼가 다루는 데이터 유형에 따라 다음과 같은 변형으로 분류 할 수 있습니다.
- ByteBuffer
- MappedByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
버퍼의 중요한 방법
이미 언급했듯이 Buffer는 메모리 블록을보다 편리하게 처리 할 수있는 일련의 메소드를 제공하는 메모리 객체 역할을합니다. 다음은 Buffer의 중요한 메소드입니다.
allocate(int capacity) −이 메소드는 용량을 매개 변수로하여 새로운 버퍼를 할당하는 데 사용되며, Allocate 메소드는 전달 된 용량이 음의 정수인 경우 IllegalArgumentException을 발생시킵니다.
read() and put() − 채널 읽기 방식은 채널에서 버퍼로 데이터를 쓰는 방식이고, 넣기 방식은 버퍼에 데이터를 쓰는 방식입니다.
flip() − 플립 방식은 Buffer 모드를 쓰기 모드에서 읽기 모드로 전환하며 위치를 다시 0으로 설정하고 쓰기 시점의 위치로 제한을 설정합니다.
write() and get() − 채널의 쓰기 방식은 버퍼에서 채널로 데이터를 쓰는 방식이고, get은 버퍼에서 데이터를 읽는 방식입니다.
rewind() − 되감기 방식은 위치를 다시 0으로 설정하고 한계 값을 변경하지 않기 때문에 다시 읽기가 필요할 때 사용됩니다.
clear() and compact() − clear 및 compact 두 방법 모두 읽기에서 쓰기 모드로 버퍼를 만드는 데 사용됩니다.clear() 방법은 위치를 0으로 만들고 제한은 용량과 동일합니다.이 방법에서는 버퍼의 데이터가 삭제되지 않고 마커 만 다시 초기화됩니다.
반면에 compact() 메서드는 읽지 않은 데이터가 남아있을 때 사용되며이 경우 버퍼의 쓰기 모드를 사용합니다. 용량으로 설정합니다.
mark() and reset() − 이름에서 알 수 있듯이 마크 방법은 버퍼의 특정 위치를 표시하는 데 사용되며 위치를 다시 표시된 위치로 재설정합니다.
예
다음 예제는 위에 정의 된 메소드의 구현을 보여줍니다.
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
public class BufferDemo {
public static void main (String [] args) {
//allocate a character type buffer.
CharBuffer buffer = CharBuffer.allocate(10);
String text = "bufferDemo";
System.out.println("Input text: " + text);
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
//put character in buffer.
buffer.put(c);
}
int buffPos = buffer.position();
System.out.println("Position after data is written into buffer: " + buffPos);
buffer.flip();
System.out.println("Reading buffer contents:");
while (buffer.hasRemaining()) {
System.out.println(buffer.get());
}
//set the position of buffer to 5.
buffer.position(5);
//sets this buffer's mark at its position
buffer.mark();
//try to change the position
buffer.position(6);
//calling reset method to restore to the position we marked.
//reset() raise InvalidMarkException if either the new position is less
//than the position marked or merk has not been setted.
buffer.reset();
System.out.println("Restored buffer position : " + buffer.position());
}
}
산출
Input text: bufferDemo
Position after data is written into buffer: 10
Reading buffer contents:
b
u
f
f
e
r
D
e
m
o
Restored buffer position : 5