目次へ

2. バッファの操作

2.1. clear, flip, rewind

clear,flip,rewind はバッファの位置やリミットを複合的に操作するメソッドです。

clear()

リミットの値を容量の値と等しくし、位置を0に設定します。バッファを初期化して新規に使用する場合などに使用します。

flip()

リミットの値を現在位置の値と等しくし、位置を0に設定します。バッファに対して先頭から書き込んだあとに、そこまで書き込んだデータをバッファから読み取りたい場合などに使用します。バッファに対して先頭からデータを書き込んだあとflipを実行すると、そこからリミットまで読み込むことで準備したすべてのデータを読み込むことができます。次章で説明するFileChannelクラスには、バッファの内容をリミットまですべてファイルに出力するメソッドが存在します。

rewind()

リミットの値を保存したまま現在位置に0を設定します。データを書き込んで準備されたバッファを2回以上走査したい場合などに使用します。

これらのメソッドはBufferクラスで定義されており、すべてのバッファで使用することができます。

2.2. 同種バッファのビューの作成

バッファクラスには、あるバッファと内容を共有する同クラスの新しいバッファインスタンスを作成するメソッドがあります(asIntBuffer等の型を指定するビューの作成は、ByteBufferクラスにのみ定義されたメソッドです)。内容を共有するため、それぞれバッファのデータを変更すると、別のバッファにも変更が反映されます。

duplicate()

同じサイズのバッファを作成します。バッファの位置・マーク・リミットは元のバッファの値と同じ値がコピーされますが、その後はそれぞれ固有の値を保有することができます。たとえば片方のバッファで相対読み書き操作を行った場合、操作していないバッファの位置は変化しません。

slice()

元となるバッファの現在位置からリミットまでのデータを全内容とする部分バッファを作成します。新しいバッファの位置は0、リミットと容量は元となるバッファの現在位置からリミットまでの大きさに設定されます。

asReadOnlyBuffer()

duplicateと同じく同サイズのバッファを作成しますが、作成されたバッファは読み込み専用となります。読み込み専用バッファに対して書き込み操作を行おうとすると、java.nio.ReadOnlyBufferExceptionが発生します。なお、読み込み専用バッファに対してビューを作成すると、新しいバッファは必ず読み込み専用となります。あるバッファが読み込み専用であるかどうかは、isReadBufferメソッドにより調べることができます。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp