programing

ByteBuffer의 플립 방식의 목적은 무엇입니까? (그리고 왜 "플립"이라고 부릅니까?)

prostudy 2022. 9. 6. 21:27
반응형

ByteBuffer의 플립 방식의 목적은 무엇입니까? (그리고 왜 "플립"이라고 부릅니까?)

ByteBuffer의 flip() 메서드는 왜 "flip"이라고 합니까?여기서 "flipped"란 무엇입니까?apidoc에 따르면 두 번의 연속된 플립은 원래 상태로 복원되지 않으며 여러 번의 플립이 발생할 수 있습니다.limit()0이 되는 거죠.

제한을 초과한 바이트를 재사용하기 위해 어떻게든 "플립 해제"할 수 있습니까?

플립할 꼬리를 다른 데이터와 연결할 수 있습니까?

의 매우 일반적인 사용 사례 중 하나는ByteBuffer데이터 구조를 하나씩 구성하고 전체 구조를 디스크에 쓰는 것입니다. flip를 뒤집는 데 사용됩니다.ByteBuffer'I/O에서 읽기'(putting) "I/O에 쓰기"(getting): 일련의 동작 후에puts는 다음 값을 채우기 위해 사용됩니다.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

반응형