web-dev-qa-db-ja.com

バイト配列の分割

Javaのバイト配列から特定のバイトを取得することは可能ですか?

バイト配列があります:

_byte[] abc = new byte[512]; 
_

そして、私はこの配列から3つの異なるバイト配列が欲しいです。

  1. バイト0-127
  2. バイト128-255
  3. byte256-511。

abc.read(byte[], offset,length)を試しましたが、オフセットを0として指定した場合にのみ機能します。他の値ではIndexOutOfbounds例外をスローします。

私は何を間違えていますか?

29
Tara Singh

そのために Arrays.copyOfRange() を使用できます。

64
tangens

Arrays.copyOfRange()は、Java 1.6。で導入されています。古いバージョンを使用している場合は、内部的に System.arraycopy(...) を使用しています。実装されています:

public static <U> U[] copyOfRange(U[] original, int from, int to) {
    Class<? extends U[]> newType = (Class<? extends U[]>) original.getClass();
    int newLength = to - from;
    if (newLength < 0) {
        throw new IllegalArgumentException(from + " > " + to);
    }
    U[] copy = ((Object) newType == (Object)Object[].class)
        ? (U[]) new Object[newLength]
        : (U[]) Array.newInstance(newType.getComponentType(), newLength);
    System.arraycopy(original, from, copy, 0,
                     Math.min(original.length - from, newLength));
    return copy;
}
14
Bozho

元の配列の上部のビューとしてバイトバッファを使用することもできます。

1
Ron