바이트를 새로운 버퍼에 복사하지 않고 단일 인스턴스처럼 보이게 만드는 ByteBuffer 인스턴스의 배열을 래핑하는 java.nio.ByteBuffer 구현을 알고 있습니까?ByteBuffer views
답변
구현은 java.nio에는 존재하지 않지만, 거의 모든 채널은 ByteBuffers의 배열을 직접 읽고 쓸 수있는 GatheringByteChannel
및 ScatteringByteChannel
을 구현합니다.
long write(ByteBuffer[] srcs)
지정된 버퍼로부터이 채널의 바이트 순서를 쓴다.
긴
read(ByteBuffer[] dsts)
지정된 버퍼에이 채널의 바이트 순서를 읽는다.
위 메소드의 부분 버전도 있습니다 (위 링크 참조).
NIO의 포인트는 가능한 한 낮은 오버 헤드를 가져야하며, 이렇게하는 방법 (별도의 객체가 버퍼를 감싸는 것과 달리)은 간단한 배열보다 많은 오버 헤드가 발생하지 않습니다. 나는 당신과 그 구현을위한 의도 된 유스 케이스라고 생각합니다.
내가 아는 바로는 Netty 내의 Bytes라는 클래스입니다. 슬프게도 ByteBuffer를 확장하지는 않습니다. 채널이 나에게 잘못된 클래스이고, ByteBuffer (채널이 아님)가 필요한 라이브러리를 통해 전달하려고합니다. 이미 바이트를 복사하여이 문제를 해결했지만 많은 바이트가이 시스템을 통해 흐르기 때문에 더 적은 바이트 복사가 발생합니다. 생각해 줘서 고마워. –
라이브러리를 포크하고 메서드를 확장하여 단일 ByteBuffer 대신 ByteBuffer 배열을 허용하지 않는 이유는 무엇입니까? 필자는 읽기와 쓰기를 담당하는 기본 '채널'이 위의 작업을 지원할 것이라고 추측하고 있으며, 작동하려면 몇 줄 이상을 변경할 필요가 없습니다. –
재미있는 아이디어입니다. 고마워요. 나는 그것을 고려하지 않았다. 내 직감은 ByteBuffer를 직접 포장하는 것보다 더 많은 시간이 걸린다는 것입니다. 그러나 나는 그것을 스파이크로 만들어 그것을 인도하는 곳을 보게 될 것이다. 그들은 당신이 기대하는대로 기본 코드가 있다면 나는 단지 운이 좋을지도 모른다. –
표준 Java API에는 아무 것도 없습니다. 그리즐리 NIO 프레임 워크는 CompositeBuffer을 가지고 있지만 그것은 래퍼로서 자신의 버퍼의 사용합니다 :
이import org.glassfish.grizzly.Buffer;
import org.glassfish.grizzly.memory.BuffersBuffer;
import org.glassfish.grizzly.memory.CompositeBuffer;
....
ByteBuffer byteBuffer = ....;
HeapMemoryManager mm = new HeapMemoryManager();
CompositeBuffer buffer = BuffersBuffer.create();
Buffer b = mm.wrap(byteBuffer);
buffer.append(b);
- 1. Java의 Bytebuffer
- 2. ByteBuffer 지우기
- 3. 는 귀하의 ByteBuffer
- 4. ByteBuffer allocate 및 allocateDirect
- 5. Java NIO Pipe와 ByteBuffer
- 6. Java에서 ByteBuffer 바이트 채우기
- 7. Java의 Infinite ByteBuffer
- 8. ByteBuffer 대 ChannelBuffer
- 9. JNI에서 ByteBuffer 조작
- 10. LibGDX 텍스처 by ByteBuffer
- 11. ByteBuffer recycling class
- 12. 직접 ByteBuffer 사용 방법
- 13. ByteBuffer parse unsigned int
- 14. 제로 용량 할당 ByteBuffer
- 15. Java AsynchronousFileChannel 및 ByteBuffer
- 16. Java ByteBuffer 데이터 지우기
- 17. ByteBuffer 언더 플로 예외가 발생했습니다
- 18. 공백을 찾는 ByteBuffer 구문 분석
- 19. Java ByteBuffer 대 랩 적용
- 20. Direct ByteBuffer 및 스레드 안전성
- 21. MVC-VIEWs - ASP.NET 표시
- 22. 드루팔 (Drupal views) 구조
- 23. 드루팔 (Drupal Views, Taxonomy)
- 24. Symfony editing admin views
- 25. Drupal Views 통합
- 26. Drupal Views from Feeds
- 27. Backbonejs Marionettejs zombie views
- 28. Preg_Match For YouTube Views
- 29. rails crud views 업데이트
- 30. SAP HANA Analytical Views
'ByteBuffer' ('Buffer')이 고정 크기입니다. "연결"과 같은 것을 만드는 것은 불가능합니다. 당신은 정말로 무엇을하고 싶습니까? – shuangwhywhy
ByteBuffers에 의존하는 저수준 코드를 최적화하고 발생하는 바이트 복사 수를 줄이는 것이 좋습니다. 자연스럽게 바이트 버퍼간에 바이트를 복사하는 것은 간단하지만, nio 프레임 워크가 발견 한 것처럼 간단합니다. 많은 양의 바이트를 반복해서 저장하면 반복됩니다. –
대용량 ByteBuffer를 한번에 만들어 보시지 않겠습니까? 아니면 그냥 배열을 사용하십시오. – shuangwhywhy