public interface SeekableByteChannel extends ByteChannel
シーク可能なバイト・チャネルは、読み取りおよび書込みが可能な可変長のバイト・シーケンスが含まれているエンティティ(通常はファイル)に接続されます。現在の位置を照会
および変更
することができます。チャネルは、チャネルが接続されているエンティティの現在のサイズにアクセスできるようにします。サイズは、現在のサイズを上回るバイト数が書き込まれると大きくなり、切り捨て
によって小さくなります。
position
メソッドとtruncate
メソッドのうち戻り値を返さないものは、自身を呼び出したチャネルを返します。これを応用して、メソッド呼出しを連鎖させることができます。このインタフェースの実装は、この実装クラスのメソッド呼出しを連鎖できるように、戻り型を特殊化することをお薦めします。
修飾子と型 | メソッドと説明 |
---|---|
long |
position()
このチャネルの位置を返します。
|
SeekableByteChannel |
position(long newPosition)
このチャネルの位置を設定します。
|
int |
read(ByteBuffer dst)
このチャネルのバイト・シーケンスを指定のバッファに読み込みます。
|
long |
size()
このチャネルの接続先のエンティティの現在のサイズを返します。
|
SeekableByteChannel |
truncate(long size)
このチャネルの接続先のエンティティの末尾を切詰め、指定されたサイズにします。
|
int |
write(ByteBuffer src)
このチャネルのバイト・シーケンスを指定のバッファから書き出します。
|
int read(ByteBuffer dst) throws IOException
バイトの読取りは、このチャネルの現在の位置から開始されます。その後、実際に読み取られたバイト数により位置が更新されます。それ以外の場合は、このメソッドはReadableByteChannel
インタフェースの指定どおりに動作します。
read
、インタフェース: ReadableByteChannel
dst
- バイトの転送先バッファClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合int write(ByteBuffer src) throws IOException
チャネルが、APPEND
オプションを指定して開いたファイルなどのエンティティに接続されている場合を除き、バイトの書込みは、このチャネルの現在の位置から開始されます。このオプションを使用する場合、位置は最初にファイルの末尾まで進みます。チャネルが接続されているエンティティのサイズは、書き込まれたバイト数に合わせ、必要であれば大きくなります。位置は、実際に書き込まれたバイト数によって更新されます。それ以外の場合は、このメソッドはWritableByteChannel
インタフェースの指定どおりに動作します。
write
、インタフェース: WritableByteChannel
src
- バイトの取得先バッファClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 書込み中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合long position() throws IOException
ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合SeekableByteChannel position(long newPosition) throws IOException
位置の値を現在のサイズより大きい値に設定するのは正当な処理ですが、この処理によってエンティティのサイズが変更されるわけではありません。ファイルの現在のサイズより大きい値が設定されている位置でバイトを読み取ろうとすると、即座にファイルの終わりが通知されます。そのような位置であとでバイトを書き込もうとすると、新しいバイトに合わせてエンティティのサイズが大きくなります。以前のファイルの終わりから新しく書き込まれたバイトまでの間に存在するバイトの値は未指定です。
APPEND
オプションを指定して開いたエンティティ(通常はファイル)に接続されているときに、チャネルの位置を設定することはお薦めできません。追加可能なときは、位置は最初に末尾まで進んでから、書込みが行われます。
newPosition
- 新しい位置。エンティティの先頭からのバイト数を示す負でない整数ClosedChannelException
- このチャネルがクローズしている場合IllegalArgumentException
- 新しい位置が負の値の場合IOException
- その他の入出力エラーが発生した場合long size() throws IOException
ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合SeekableByteChannel truncate(long size) throws IOException
指定されたサイズが現在のサイズよりも小さい場合、エンティティの末尾が切り詰められ、新しい終わりに収まらないバイトが破棄されます。指定されたサイズが現在のサイズ以上の場合、エンティティは変更されません。どちらの場合も、現在の位置が指定されたサイズよりも大きい場合、そのサイズに合わせて位置が設定されます。
APPEND
オプションを指定して開いたエンティティ(通常はファイル)に接続されているとき、このインタフェースの実装では切詰めが禁止されている場合があります。
size
- 新しいサイズ。負ではないバイト数NonWritableChannelException
- このチャネルが書込み可能でない場合ClosedChannelException
- このチャネルがクローズしている場合IllegalArgumentException
- 新しいサイズが負の値の場合IOException
- その他の入出力エラーが発生した場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.