자바 버퍼 예제

요청한 요소 수를 전송할 수 없는 경우 데이터가 전송되지 않고 버퍼 상태가 변경되지 않고 BufferUnderflowException이 throw됩니다. 버퍼에 배열을 완전히 채울 수 있는 최소한 충분한 요소가 포함되어 있지 않으면 예외가 표시됩니다. 즉, 작은 버퍼를 큰 배열로 전송하려면 버퍼에 남아 있는 데이터의 길이를 명시적으로 지정해야 합니다. 버퍼 개체는 고정된 양의 데이터에 대해 컨테이너라고 할 수 있습니다. 데이터를 저장하고 나중에 검색할 수 있는 보류 탱크 또는 임시 준비 영역역할을 합니다. 버퍼는 채널이 있는 장갑에서 작동합니다. 채널은 I/O 전송이 이루어지는 실제 포털입니다. 버퍼는 이러한 데이터 전송의 원본 또는 대상입니다. 외부 전송의 경우 보낼 데이터는 외부 채널로 전달되는 버퍼에 배치됩니다. 내부 전송의 경우 채널은 제공한 버퍼에 데이터를 저장한 다음 버퍼에서 채널로 데이터를 복사합니다. NIO API하에서 효율적인 데이터 처리의 핵심은 협력 개체 간의 버퍼 를 해제하는 것입니다. asReadOnlyBuffer() 메서드를 사용하여 버퍼의 읽기 전용 보기를 만들 수 있습니다.

새 버퍼가 put()s를 허용하지 않으며 isReadOnly() 메서드가 true를 반환한다는 점을 제외하면 중복()과 동일합니다. 읽기 전용 버퍼에 put()을 호출하려고 하면 ReadOnlyBufferException이 throw됩니다. 모든 기본 형식에 대해 버퍼 형식이 있으며 모든 버퍼 클래스는 버퍼 인터페이스를 구현할 수 있습니다. 가장 주로 사용되는 버퍼 유형은 ByteBuffer입니다. 또한 버퍼 참조를 인수로 put()를 호출하여 한 버퍼에서 다른 버퍼로 대량으로 데이터를 이동할 수도 있습니다. flip() 메서드는 데이터 요소를 추가할 수 있는 채우기 상태에서 요소를 읽을 준비가 된 드레인 상태로 버퍼를 뒤집습니다. 텍스트 문자열은 버퍼에 한 번에 하나의 문자로 작성됩니다. 게시물의 시작 부분에서 설명한 대로 특성 `mark`를 사용하면 버퍼가 위치를 기억하고 나중에 다시 돌아갈 수 있습니다. mark() 메서드가 호출될 때까지 버퍼의 마크가 정의되지 않고, 이 때 마크가 현재 위치로 설정됩니다. reset() 메서드는 위치를 현재 표시로 설정합니다.

마크가 정의되지 않은 경우 reset()을 호출하면 유효 하지 않은 MarkException이 발생 합니다. 일부 버퍼 메서드는 설정된 경우 표시를 삭제합니다(되감기(), clear(), 및 flip()는 항상 마크를 삭제합니다. 인덱스 인수를 취하는 limit() 또는 position()의 버전을 호출하면 설정중인 새 값이 현재 마크보다 작으면 마크가 삭제됩니다. 버퍼는 compareTo() 메서드와의 사전 비교도 지원합니다. 이 메서드는 버퍼 인수가 각각 compareTo()가 호출된 개체 인스턴스보다 적거나 같거나 큰 경우 음수, 0 또는 양수인 정수를 반환합니다. 모든 형식 버퍼가 구현하는 java.lang.Comparable 인터페이스의 의미 체계입니다. 즉, java.util.Arrays.sort()를 호출하여 버퍼 배열을 콘텐츠에 따라 정렬할 수 있습니다. 이 예제에서는 파일 채널이 있는 바이트 버퍼의 사용을 보여 주십니까?