언제 바이트 배열을 사용하고 언제 바이트 버퍼를 사용합니까?
바이트 배열과 바이트 버퍼의 차이점은 무엇입니까?
또한 어떤 상황에서 한 쪽을 다른 쪽보다 선호해야합니까?
[제 사용 사례는 자바로 개발중인 웹 애플리케이션입니다].
실제로 바이트로 작업하는 방법에는 여러 가지가 있습니다. 그리고 나는 최고의 것을 선택하는 것이 항상 쉬운 것은 아니라는 데 동의합니다.
- 그만큼
byte[]
- 그만큼
java.nio.ByteBuffer
java.io.ByteArrayOutputStream
(다른 스트림과의 조합)- 그만큼
java.util.BitSet
는 byte[]
그냥 미가공 데이터를 포함하는 프리미티브 (primitive) 배열이다. 따라서 콘텐츠를 작성하거나 조작하는 편리한 방법이 없습니다.
A ByteBuffer
는 건축업자와 비슷합니다. 그것은을 생성합니다 byte[]
. 배열과 달리 더 편리한 도우미 메서드가 있습니다. (예 : append(byte)
방법). 사용법 측면에서 그렇게 간단하지 않습니다 . (대부분의 튜토리얼은 너무거나 품질이 좋지 복잡하지만,이 사람은 어딘가에 당신을 얻을 것이다. 그것을 가지고 한 단계 더? 그 많은 읽어 함정 .)
당신은이 말을 유혹 할 수 ByteBuffer
에 수행 byte[]
A는 무엇 StringBuilder
을 위해 않습니다 String
. 그러나 ByteBuffer
수업 에는 특별한 차이 / 단점이 있습니다. 그냥 배열과 마찬가지로, 는 ByteBuffer
고정 된 크기를 갖는다. 따라서 인스턴스화 할 때 이미 버퍼의 크기를 지정해야합니다.
그 이유의 하나 내가 자주를 사용하는 것을 선호 ByteArrayOutputStream
, 자동으로 크기를 조절하기 때문에 이처럼 ArrayList
않습니다. ( toByteArray()
방법이 있습니다). 때로는 그것을 DataOutputStream
. 장점은 몇 가지 추가 편의 호출이 있다는 것입니다 (예 : writeShort(int)
2 바이트를 작성해야하는 경우).
BitSet
비트 수준 작업을 수행 할 때 유용합니다. 개별 비트를 가져 오거나 설정할 수 있으며 xor()
. (이 toByteArray()
메서드는 Java 7에서만 도입되었습니다.)
물론 필요에 따라 모두 결합하여 byte[]
.
ByteBuffer는 파일 기반 데이터의 빠른 처리량을 위해 개발 된 새로운 IO 패키지 (nio)의 일부입니다. 특히 Apache는 디스크에서 바이트를 읽고 다양한 버퍼를 통해 셔플 링하지 않고 네트워크에 직접 배치하기 때문에 매우 빠른 웹 서버 (C로 작성)입니다. Java의 초기 버전에는 없었던 메모리 매핑 파일을 통해이를 수행합니다. nio의 출현으로 Apache만큼 빠른 Java로 웹 서버를 작성할 수있게되었습니다. 매우 빠른 파일 대 네트워크 처리량을 원하면 메모리 매핑 파일과 ByteBuffer를 사용하는 것이 좋습니다.
데이터베이스는 일반적으로 메모리 매핑 파일을 사용하지만 이러한 유형의 사용은 Java에서 거의 효율적이지 않습니다. C / C ++에서는 많은 양의 메모리를로드하여 원하는 형식화 된 데이터로 캐스트 할 수 있습니다. Java의 보안 모델로 인해 특정 기본 유형으로 만 변환 할 수 있고 이러한 변환이 그다지 효율적이지 않기 때문에 일반적으로 실행 가능하지 않습니다. ByteBuffer는 일반 바이트 데이터로 바이트를 처리 할 때 가장 잘 작동합니다. 일단이를 객체로 변환해야하는 경우 다른 Java io 클래스는 일반적으로 성능이 더 우수하고 사용하기 쉽습니다.
메모리 매핑 된 파일을 다루지 않는 경우 ByteBuffer에 신경 쓸 필요가 없습니다. 일반적으로 바이트 배열을 사용합니다. 파일 기반 원시 바이트 데이터의 처리량이 가장 빠른 웹 서버를 구축하려는 경우 ByteBuffer (특히 MappedByteBuffer)가 가장 좋은 친구입니다.
이 두 기사는 http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly 및 http://evanjones.ca/software/java-bytebuffers.html에 도움이 될 수 있습니다 .
참고 URL : https://stackoverflow.com/questions/5210840/when-to-use-byte-array-when-byte-buffer
'Program Tip' 카테고리의 다른 글
C 및 C ++의 문자열 리터럴 유형은 무엇입니까? (0) | 2020.12.05 |
---|---|
검색 엔진은 관련 콘텐츠를 어떻게 찾습니까? (0) | 2020.12.05 |
ASP.NET MVC의 사용자 인증 및 권한 부여 (0) | 2020.12.05 |
모든 열을 기준으로 SQL 그룹화 (0) | 2020.12.05 |
offline_access 지원 중단 이후 액세스 토큰 유효성을 확장하는 방법 (0) | 2020.12.04 |