Buffer - Java NIO

Java NIO의 Buffer 클래스는 데이터를 읽고 쓰기 위해 다양한 API를 제공합니다.

  • clear(): 새로운 쓰기를 준비합니다.

  • flip(): 읽기를 준비합니다.

  • rewind(): 처음부터 다시 읽기 위해 사용합니다.

  • mark(): 현재 위치를 저장합니다.

  • reset(): 마지막 mark 위치로 돌아갑니다.

  • remaining(): 읽거나 쓸 수 있는 데이터의 양을 반환합니다.

  • hasRemaining(): 버퍼에 더 읽거나 쓸 데이터가 있는지 확인합니다.

import java.nio.ByteBuffer;

public class BufferExample {
    public static void main(String[] args) {
        // 1. Buffer 생성
        ByteBuffer buffer = ByteBuffer.allocate(10);

        // 2. 데이터 쓰기
        buffer.put((byte) 1);
        buffer.put((byte) 2);
        buffer.put((byte) 3);

        // 3. 읽기 준비 (flip 호출)
        buffer.flip();  // position을 0으로 설정하고 limit을 현재 position으로 설정

        // 4. 데이터 읽기
        while (buffer.hasRemaining()) {
            System.out.println("Read value: " + buffer.get());
        }

        // 5. Buffer 재사용을 위한 준비 (clear 호출)
        buffer.clear();  // position을 0으로 설정하고 limit을 capacity로 설정

        // 6. 다시 데이터 쓰기
        buffer.put((byte) 4);
        buffer.put((byte) 5);

        // 7. mark()와 reset() 사용 예시
        buffer.mark();  // 현재 position (2)을 mark
        buffer.put((byte) 6);

        // position을 limit으로 설정하여 읽기 모드로 전환 (flip 호출)
        buffer.flip();

        // 8. 데이터 읽기
        while (buffer.hasRemaining()) {
            System.out.println("Read value after reset: " + buffer.get());
        }

        // 9. reset() 호출하여 mark된 위치로 돌아감
        buffer.reset();  // mark된 위치 (2)로 position을 되돌림
        System.out.println("Position after reset: " + buffer.position());

        // 10. remaining() 사용 예시
        System.out.println("Remaining elements: " + buffer.remaining());

        // 11. rewind() 사용 예시
        buffer.rewind();  // position을 0으로 설정
        System.out.println("Position after rewind: " + buffer.position());

        // 12. 다시 데이터 읽기
        while (buffer.hasRemaining()) {
            System.out.println("Read value after rewind: " + buffer.get());
        }
    }
}

Last updated