2012-08-10 5 views
1

가능한 중복 :
byte array to Int ArrayJava에서 배열 유형을 변경할 수 있습니까?

나는 어떻게 든 각 항목 그냥 원래 바이트의 네되도록 int 배열로 해석 할 수있는 대규모 바이트 배열을 ?

for (int i = 0; i < byteArray.length; i += 4) { 
    intArray[i/4] = byteArray[i] << 24 + byteArray[i+1] << 16 + byteArray[i+2] << 8 + byteArray[i+3]; 
} 

아니라 배열이 거대하기 때문에 영원히 소요 바이트로 전체 배열 바이트를 복사하는 것보다, 단지 이미 존재하는 배열 오프의 int를 읽어

나는 같은 것을 의미한다.

+0

반드시 바이트를 읽고 int 변수에 넣으면 자동으로 int로 변환됩니다. 그러나 배열 자체의 바이트는 그대로 유지되며 바이트로 남아 있어야합니다. –

+2

'ByteBuffer.wrap (byteArray) .toIntBuffer()' –

+2

@LiuYan 刘 研 'asIntBuffer' – assylias

답변

4

이 코드를 사용 :

IntBuffer intarray = ByteBuffer.wrap(bytearray).order(ByteOrder.BIG_ENDIAN).asIntBuffer(); 
intarray.get(100); 

매우 몇 가지 추가 힙 공간을 차지합니다. 사실, 바이트 배열을 래핑하고 int 배열보기를 만듭니다. 내 PC에서 버퍼 크기가 INT_MAX 인 경우 상당히 빠른 속도로 몇 나노초 걸립니다.

1

Q : Java로 배열 유형을 변경할 수 있습니까?

A : 일반적으로 "아니오"입니다. 항목별로 복사/변환해야합니다.

이 특별한 경우 : 예, 물론입니다. 그냥 asIntBuffer()를 사용하십시오. 예를 들어 :

import java.nio.*; 
import java.nio.IntBuffer; 
import java.nio.ByteBuffer; 

public class MyClass { 

    public static void main(String[] args) throws Exception { 
    ByteBuffer byteBuffer = ByteBuffer.allocate(1024); 
    int[] array = new int[] { 1, 2, 3, 4 }; 
    IntBuffer IntBuf = byteBuffer.asIntBuffer(); 
    IntBuf.put(array); 
    ... 

참고 이러한 변환 (및 관련 "플립", "포장", 바이트 순서를 변경하는 기능 등)을 java.nio 도입 된 것이다.

+0

추 신 : 보헤미안이 정확합니다. 원래 배열은 변경되지 않습니다. asIntBuffer()와 친구들은 배열을 * 복사 *합니다. 필요에 따라 변형. 매우 효율적입니다. – paulsm4

1

번호 배열의 유형은 변경되지 않습니다.

아니요, 그렇긴하지만 어쩌면.

+0

당신은 절대적으로 맞습니다 :) 저는 OP가 배열을 요소별로 복사하고 변환하는 대안이 있는지 알고 싶다고 생각합니다. 그리고,이 경우에는 있습니다. – paulsm4

관련 문제