Program Tip

언제 바이트 배열을 사용하고 언제 바이트 버퍼를 사용합니까?

programtip 2020. 12. 5. 10:27
반응형

언제 바이트 배열을 사용하고 언제 바이트 버퍼를 사용합니까?


바이트 배열과 바이트 버퍼의 차이점은 무엇입니까?
또한 어떤 상황에서 한 쪽을 다른 쪽보다 선호해야합니까?

[제 사용 사례는 자바로 개발중인 웹 애플리케이션입니다].


실제로 바이트로 작업하는 방법에는 여러 가지가 있습니다. 그리고 나는 최고의 것을 선택하는 것이 항상 쉬운 것은 아니라는 데 동의합니다.

  • 그만큼 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_quicklyhttp://evanjones.ca/software/java-bytebuffers.html에 도움이 될 수 있습니다 .

참고 URL : https://stackoverflow.com/questions/5210840/when-to-use-byte-array-when-byte-buffer

반응형