Java에서 ByteBuffer의 용도는 무엇입니까?
Java에서의 어플리케이션 예는 무엇입니까?이것이 사용되는 시나리오의 예를 제시해 주십시오.
이것은 그 용도와 단점에 대한 좋은 설명입니다.기본적으로 빠른 저레벨 I/O가 필요할 때마다 사용합니다.TCP/IP 프로토콜을 구현하거나 데이터베이스(DBMS)를 작성하는 경우 이 클래스는 유용합니다.
ByteBuffer 클래스는 Java에서 채널을 사용하기 위한 기반이 되기 때문에 중요합니다.ByteBuffer 클래스는 Java 7 매뉴얼에 기재되어 있듯이 바이트 버퍼에 대한6가지 카테고리의 동작을 정의합니다.
Example code : Putting Bytes into a buffer.
// Create an empty ByteBuffer with a 10 byte capacity
ByteBuffer bbuf = ByteBuffer.allocate(10);
// Get the buffer's capacity
int capacity = bbuf.capacity(); // 10
// Use the absolute put(int, byte).
// This method does not affect the position.
bbuf.put(0, (byte)0xFF); // position=0
// Set the position
bbuf.position(5);
// Use the relative put(byte)
bbuf.put((byte)0xFF);
// Get the new position
int pos = bbuf.position(); // 6
// Get remaining byte count
int rem = bbuf.remaining(); // 4
// Set the limit
bbuf.limit(7); // remaining=1
// This convenience method sets the position to 0
bbuf.rewind(); // remaining=7
스트림 지향 API를 이용한 Java IO는 사용자 공간 내 데이터의 임시 저장공간으로 버퍼를 이용하여 실행한다.DMA에 의해 디스크에서 읽혀진 데이터는 먼저 커널 공간의 버퍼에 복사되고, 그 버퍼는 사용자 공간의 버퍼로 전송됩니다.따라서 오버헤드가 있습니다.이를 회피하면 퍼포먼스가 크게 향상됩니다.
커널 공간에서 버퍼에 직접 액세스할 수 있는 방법이 있다면 사용자 공간에서 이 임시 버퍼를 건너뛸 수 있습니다.Java NIO는 이를 위한 방법을 제공합니다.
ByteBuffer
는 Java 되는 여러 중 입니다.데이터를 읽거나 쓸 수 있는 컨테이너 또는 보관 탱크입니다.은, 됩니다.allocateDirect()
버퍼상의 API.
Java Documentation of Byte Buffer에는 유용한 정보가 있습니다.
다음은 ByteBuffer의 이점을 설명하는 훌륭한 기사입니다.이 기사의 요점은 다음과 같습니다.
- ByteBuffer의 첫 번째 장점은 직접적이든 간접적이든 상관없이 구조화된 바이너리 데이터의 효율적인 랜덤 액세스입니다(예를 들어, 답변 중 하나에서 언급된 낮은 수준의 IO).Java 1.4 이전 버전에서는 이러한 데이터를 읽기 위해 DataInputStream을 사용할 수 있었지만 랜덤 액세스가 없었습니다.
다이렉트 바이트 버퍼/매핑 바이트 버퍼 전용의 메리트를 다음에 나타냅니다.직접 버퍼는 힙 외부에 생성됩니다.
gc 사이클의 영향을 받지 않음:직접 버퍼는 힙 외부에 있으므로 가비지 수집 주기 동안 이동되지 않습니다.TerraCota의 BigMemory 캐싱 기술은 이러한 장점에 크게 의존하고 있는 것으로 보입니다.히프에 있는 경우 gc 포즈 시간이 느려집니다.
퍼포먼스 향상:스트림 IO에서 읽기 호출에는 시스템 호출이 수반됩니다.이 콜은 사용자 간에 커널 모드로 또는 그 반대로 컨텍스트 전환이 필요하며, 특히 파일에 지속적으로 액세스하는 경우 비용이 많이 듭니다.다만, 메모리 매핑에서는, 데이터가 메모리(매핑 바이트 버퍼)내에서 검출될 가능성이 높아지기 때문에, 이 콘텍스트 스위칭은 감소합니다.메모리내에서 데이터를 사용할 수 있는 경우는, OS 를 기동하지 않고 직접 액세스 할 수 있습니다.즉, 컨텍스트 스위칭은 필요 없습니다.
MappedByteBuffer는 특히 파일이 크고 액세스 빈도가 높은 블록 그룹이 적은 경우에 매우 유용합니다.
- 페이지 공유:메모리 매핑 파일은 프로세스의 가상 메모리 공간에 할당될 때 프로세스 간에 공유할 수 있으며 프로세스 간에 공유할 수 있습니다.
Android 에서는, C++ 와 Java 사이에 공유 버퍼를 작성해(directAlloc 메서드로), 양쪽에서 조작할 수 있습니다.
언급URL : https://stackoverflow.com/questions/4841340/what-is-the-use-of-bytebuffer-in-java
'programing' 카테고리의 다른 글
auto a=1; C에서 컴파일되는 이유는 무엇입니까? (0) | 2022.07.31 |
---|---|
Vue JS의 어레이에서 항목 설명 편집 (0) | 2022.07.31 |
Spring Boot + JPA : 열 이름 주석이 무시되었습니다. (0) | 2022.07.31 |
vue-router 3.5.1 경고: 의 태그 프로포트가 사용되지 않으며 Vue Router 4에서 제거되었습니다. (0) | 2022.07.30 |
Cygwin에서 파일을 실행하려면 어떻게 해야 합니까? (0) | 2022.07.30 |