モジュール java.base
パッケージ java.nio.channels

インタフェースSeekableByteChannel

すべてのスーパー・インタフェース:
AutoCloseable, ByteChannel, Channel, Closeable, ReadableByteChannel, WritableByteChannel
既知のすべての実装クラス:
FileChannel

public interface SeekableByteChannel extends ByteChannel
現在の位置を保持し、位置の変更を許可するバイト・チャネル。

シーク可能なバイト・チャネルは、読み取りおよび書込みが可能な可変長のバイト・シーケンスが含まれているエンティティ(通常はファイル)に接続されます。 現在の位置を照会および変更することができます。 チャネルは、チャネルが接続されているエンティティの現在のサイズにアクセスできるようにします。 サイズは、現在のサイズを上回るバイト数が書き込まれると大きくなり、切り捨てによって小さくなります。

positionメソッドとtruncateメソッドのうち戻り値を返さないものは、自身を呼び出したチャネルを返します。 これを応用して、メソッド呼出しを連鎖させることができます。 このインタフェースの実装は、この実装クラスのメソッド呼出しを連鎖できるように、戻り型を特殊化することをお薦めします。

導入されたバージョン:
1.7
関連項目:
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    long
    このチャネルの位置を返します。
    position(long newPosition)
    このチャネルの位置を設定します。
    int
    このチャネルのバイト・シーケンスを指定のバッファに読み込みます。
    long
    このチャネルの接続先のエンティティの現在のサイズを返します。
    truncate(long size)
    このチャネルの接続先のエンティティの末尾を切詰め、指定されたサイズにします。
    int
    このチャネルのバイト・シーケンスを指定のバッファから書き出します。

    インタフェース java.nio.channels.Channelで宣言されたメソッド

    close, isOpen
  • メソッドの詳細

    • read

      int read(ByteBuffer dst) throws IOException
      このチャネルのバイト・シーケンスを指定のバッファに読み込みます。

      バイトの読取りは、このチャネルの現在の位置から開始されます。その後、実際に読み取られたバイト数により位置が更新されます。 それ以外の場合は、このメソッドはReadableByteChannelインタフェースの指定どおりに動作します。

      定義:
      read、インタフェースReadableByteChannel
      パラメータ:
      dst - バイトの転送先バッファ
      戻り値:
      読み取られたバイト数。ゼロの場合もある。チャネルがストリームの終わりに達した場合は-1
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      IOException - その他の入出力エラーが発生した場合
    • write

      int write(ByteBuffer src) throws IOException
      このチャネルのバイト・シーケンスを指定のバッファから書き出します。

      チャネルが、APPENDオプションを指定して開いたファイルなどのエンティティに接続されている場合を除き、バイトの書込みは、このチャネルの現在の位置から開始されます。このオプションを使用する場合、位置は最初にファイルの末尾まで進みます。 チャネルが接続されているエンティティのサイズは、書き込まれたバイト数に合わせ、必要であれば大きくなります。位置は、実際に書き込まれたバイト数によって更新されます。 それ以外の場合は、このメソッドはWritableByteChannelインタフェースの指定どおりに動作します。

      定義:
      write、インタフェースWritableByteChannel
      パラメータ:
      src - バイトの取得先バッファ
      戻り値:
      書き込まれるバイト数。ゼロの場合もある
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 書込み中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      IOException - その他の入出力エラーが発生した場合
    • position

      long position() throws IOException
      このチャネルの位置を返します。
      戻り値:
      このチャネルの位置。エンティティの先頭から現在の位置までのバイト数を示す負でない整数
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
    • position

      このチャネルの位置を設定します。

      位置の値を現在のサイズより大きい値に設定するのは正当な処理ですが、この処理によってエンティティのサイズが変更されるわけではありません。 ファイルの現在のサイズより大きい値が設定されている位置でバイトを読み取ろうとすると、即座にファイルの終わりが通知されます。 そのような位置であとでバイトを書き込もうとすると、新しいバイトに合わせてエンティティのサイズが大きくなります。以前のファイルの終わりから新しく書き込まれたバイトまでの間に存在するバイトの値は未指定です。

      APPENDオプションを指定して開いたエンティティ(通常はファイル)に接続されているときに、チャネルの位置を設定することはお薦めできません。 追加可能なときは、位置は最初に末尾まで進んでから、書込みが行われます。

      パラメータ:
      newPosition - 新しい位置。エンティティの先頭からのバイト数を示す負でない整数
      戻り値:
      このチャネル
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      IllegalArgumentException - 新しい位置が負の値の場合
      IOException - その他の入出力エラーが発生した場合
    • size

      long size() throws IOException
      このチャネルの接続先のエンティティの現在のサイズを返します。
      戻り値:
      現在のサイズ(バイト単位)
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
    • truncate

      このチャネルの接続先のエンティティの末尾を切詰め、指定されたサイズにします。

      指定されたサイズが現在のサイズよりも小さい場合、エンティティの末尾が切り詰められ、新しい終わりに収まらないバイトが破棄されます。 指定されたサイズが現在のサイズ以上の場合、エンティティは変更されません。 どちらの場合も、現在の位置が指定されたサイズよりも大きい場合、そのサイズに合わせて位置が設定されます。

      APPENDオプションを指定して開いたエンティティ(通常はファイル)に接続されているとき、このインタフェースの実装では切詰めが禁止されている場合があります。

      パラメータ:
      size - 新しいサイズ。負ではないバイト数
      戻り値:
      このチャネル
      例外:
      NonWritableChannelException - このチャネルが書込み可能でない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IllegalArgumentException - 新しいサイズが負の値の場合
      IOException - その他の入出力エラーが発生した場合