を使用ByteBuffer#slice()
してベース インスタンスの複製ビューを取得しByteBuffer
、位置を移動してコンテンツのスライド ウィンドウを表示できます。別の方法として、ベース バッファーを他のコンシューマーに公開する必要がない場合は、ベース バッファーに対して同じことを行うこともできます。
コンテンツのビューの開始位置は単一引数Buffer#position(int)
メソッドで変更でき、ビューの終了位置は で変更できますBuffer#limit(int)
。基になるバッファーの制限を超えてビューをプッシュしないように注意している限り、次のことができます。
final ByteBuffer view = base.slice();
for (int start = base.position(), end = base.limit(), stride = 1000000;
start != end;
start = view.limit())
consume(view.position(start)
.limit(start + Math.min(end - start, stride)));
私はそれをテストしませんでしたが、それは正しいようです。ここでは厳密には必要ではありませんが、位置の初期設定を回避するために書き直すことは可能ですが、繰り返しが発生するか、最初からより扱いにくい特殊なケースの処理が発生します。
基本的なfor ループ構造を維持するために、このままにしました。