バイト配列をスライスして配列の最初の部分を削除しようとしています。ByteBuffer を使用していますが、期待どおりに動作しません。
byte[] myArray = new byte[10];
ByteBuffer buf = ByteBuffer.wrap(myArray);
buf.position(5);
ByteBuffer slicedBuf = buf.slice();
byte[] newArray = slicedBuf.array();
newArray のサイズは 5 で、ByteBuffer の最後の部分のみが含まれると予想していました。代わりに、完全なバイト配列が返されました。これは、「バッキング バッファ」が最初から同じであるためだと理解しています。
配列の必要な部分だけをスライスするにはどうすればよいでしょうか?
編集: コンテキストを追加
バイトはネットワークから受信されます。バッファは次のように形成されます:
[ SHA1 hash ] [ data... lots of it ]
バイト配列をパラメータとして受け取り、SHA1 ハッシュを計算する関数はすでにあります。必要なのは、バッファ全体をスライスして、予想されるハッシュのないデータのみを渡すことです。
ベストアンサー1
あなたはArrays.copyOfRange
方法。例:
// slice from index 5 to index 9
byte[] slice = Arrays.copyOfRange(myArray, 5, 10);