Java で配列のセグメントを返すメソッドを探しています。例としては、バイト配列の 4 番目と 5 番目のバイトを含むバイト配列を取得することが挙げられます。そのためだけにヒープ メモリに新しいバイト配列を作成したくはありません。現在、次のコードがあります。
doSomethingWithTwoBytes(byte[] twoByteArray);
void someMethod(byte[] bigArray)
{
byte[] x = {bigArray[4], bigArray[5]};
doSomethingWithTwoBytes(x);
}
doSomething(bigArray.getSubArray(4, 2))
たとえば、オフセットが 4、長さが 2 になるようにする方法があるかどうか知りたいです。
ベストアンサー1
免責事項: この回答は質問の制約に準拠していません:
そのためにヒープメモリ内に新しいバイト配列を作成する必要はありません。
(正直に言うと、私の回答は削除に値すると思います。@unique72 の回答は正しいです。この編集をしばらくそのままにして、その後この回答を削除します。)
追加のヒープ割り当てなしで配列でこれを直接行う方法はわかりませんが、サブリスト ラッパーを使用する他の回答では、ラッパーのみに追加の割り当てがあり、配列には割り当てられていないため、大きな配列の場合に役立ちます。
とはいえ、簡潔さを求めるなら、ユーティリティメソッドArrays.copyOfRange()
Java 6 (2006 年後半?) で導入されました。
byte [] a = new byte [] {0, 1, 2, 3, 4, 5, 6, 7};
// get a[4], a[5]
byte [] subArray = Arrays.copyOfRange(a, 4, 6);