ByteBuffer의 플립 방식의 목적은 무엇입니까? (그리고 왜 "플립"이라고 부릅니까?)
ByteBuffer의 flip() 메서드는 왜 "flip"이라고 합니까?여기서 "flipped"란 무엇입니까?apidoc에 따르면 두 번의 연속된 플립은 원래 상태로 복원되지 않으며 여러 번의 플립이 발생할 수 있습니다.limit()
0이 되는 거죠.
제한을 초과한 바이트를 재사용하기 위해 어떻게든 "플립 해제"할 수 있습니까?
플립할 꼬리를 다른 데이터와 연결할 수 있습니까?
의 매우 일반적인 사용 사례 중 하나는ByteBuffer
데이터 구조를 하나씩 구성하고 전체 구조를 디스크에 쓰는 것입니다. flip
를 뒤집는 데 사용됩니다.ByteBuffer
'I/O에서 읽기'(put
ting) "I/O에 쓰기"(get
ting): 일련의 동작 후에put
s는 다음 값을 채우기 위해 사용됩니다.ByteBuffer
,flip
버퍼의 한계를 현재 위치로 설정하고 위치를 0으로 재설정합니다.이것은 미래를 만드는 효과가 있다.get
또는write
버퍼에서 모든 것을 기입합니다.put
버퍼에 넣을 수 있습니다.
종료 후put
, 를 재이용할 수 있습니다.ByteBuffer
다른 데이터 구조를 구축합니다.'해제'를 하려면clear
. 이렇게 하면 용량(모든 버퍼를 사용할 수 있게 됨)에 대한 제한이 리셋되고 위치가 0으로 설정됩니다.
일반적인 사용 시나리오는 다음과 같습니다.
ByteBuffer b = new ByteBuffer(1024);
for(int i=0; i<N; i++) {
b.clear();
b.put(header[i]);
b.put(data[i]);
b.flip();
out.write(b);
}
Flip은 현재 위치 값을 한계 속성에 할당하고 위치 속성을 다음과 같이 설정합니다.0
. Flip은 버퍼에서 활성 요소만 배출할 때 유용합니다.
예를 들어, 아래 프로그램에서는 버퍼의 빈 요소 대신 "hello"가 출력됩니다.메서드 호출limit
그리고.position
로 대체할 수 있다flip
.
CharBuffer cbuff = CharBuffer.allocate(40);
cbuff.put("hello");
// These two lines below are what flip does
cbuff.limit(cbuff.position());
cbuff.position(0);
while(cbuff.hasRemaining()) {
System.out.println(cbuff.get());
}
버퍼 및 채널의 자세한 내용은http://http://www.zoftino.com/java-nio-tutorial 를 참조해 주세요.
flip() 메서드는 버퍼가 채널 쓰기 또는 상대적인 get 조작의 새로운 시퀀스를 준비할 수 있도록 합니다.한계치를 현재 위치로 설정한 다음 위치를 0으로 설정합니다.
버퍼는 버퍼에 입력된 데이터를 추적합니다.쓰기 후 flip() 메서드를 호출하여 쓰기 모드에서 읽기 모드로 전환합니다.
버퍼에는 고정값이 있습니다.capacity
; 2개의 포인터를 유지합니다.start
그리고.end
.get()
의 바이트를 반환합니다.start
위치 및 증가start
.put()
바이트를 에 배치하다end
위치 및 증가end
.아니요.flip()
!
언급URL : https://stackoverflow.com/questions/14792968/what-is-the-purpose-of-bytebuffers-flip-method-and-why-is-it-called-flip
'programing' 카테고리의 다른 글
"java.net"을 해결 방법Bind Exception:이미 사용 중인 주소: JVM_Bind" 오류입니까? (0) | 2022.09.06 |
---|---|
SELECT 포함 삽입 (0) | 2022.09.06 |
Java에는 경로 결합 방식이 있습니까? (0) | 2022.09.06 |
Intelij IDEA, 프로젝트의 모든 코드 포맷 (0) | 2022.09.06 |
Python 3에서 int를 바이트로 변환하는 중 (0) | 2022.09.06 |