1

重複の可能性:
バイト配列からInt配列へ

私はバイトの大きな配列を持っていますが、各エントリが元のバイトの4つだけになるように、どういうわけかそれを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を読み取るだけです。

4

3 に答える 3

4

このコードの使用:

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

余分なヒープスペースはほとんど必要ありません。実際には、バイト配列をラップして int 配列ビューを作成します。私のPCでは、INT_MAXのバッファサイズで数ナノ秒かかります。

于 2012-08-10T00:40:11.290 に答える
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で導入されたことに注意してください。

于 2012-08-10T00:36:07.597 に答える
1

いいえ。配列の型は不変です。

いいえ、if ではありませんが、または多分です。

于 2012-08-10T01:03:52.723 に答える