New I/O 2章 バッファの操作
- 2.1. clear, flip, rewind
- 2.2. 同種バッファのビューの作成
- 2.3. 補助配列
- 2.4. バイトオーダー(ByteOrder)
2.3. 補助配列
バッファのデータは内部的に配列で保存されている場合があります。この場合、その配列をバッファの補助配列といいます。
補助配列を持つかどうかはバッファの作成方法によります。ByteBufferクラスのallocateメソッドや、各バッファクラスのwrapメソッドによってバッファを作成した場合には、必ず補助配列を持ちます。なお、allocateDirectを使用された場合に補助配列が作成されるかどうかは定義されていません(実装に依存します)。
補助配列に関連して、各型に対するバッファクラスには以下のメソッドが定義されています。
array()
バッファの補助配列を返します。
arrayOffset()
wrapメソッドによりバッファを作成した場合など、バッファの先頭のデータは必ずしも配列の先頭に存在しているとは限りません。arrayOffsetメソッドは、バッファのデータが補助配列のどの位置から始まるのかを返します。
hasArray()
バッファが補助配列を持っているかどうかを返します。
補助配列を持たないバッファに対してarrayメソッドやarrayOffsetメソッドを呼び出すと、java.lang.UnsupportedOperationExceptionが発生します。これらのメソッドを呼び出す前にはhasArrayメソッドで補助配列の存在を確認するのがよいでしょう。
(実習課題1)
次の仕様を満たすプログラムを作成してください。
- 要素数10000のint型配列を明示的に作成し、その配列を補助配列とするIntBufferを作成する。
- バッファの先頭から順番に1潤オ10の乱数を書き込む。
- 書き込んだ値の合計が10000を超えた時点で書き込みを終了する。
- バッファへの書き込みが終了したあと、バッファに蓄積したデータすべてと要素数を標準出力に出力する。