3.ファイルチャネル
New I/O 3章 ファイルチャネル
3.1. チャネル(Channel)チャネルは、ネットワークやファイルなどへの入出力操作を行うための接続です。java.ioパッケージのInputStreamやOutputStreamなどのような役割を持ちます。 チャネルに関するクラスは、java.nio.channels パッケージに含まれます。すべてのチャネルはChannel インタフェース、またはそのサブインタフェースを実装しています。java.nio.channels パッケージには、以下のようなインタフェースが存在します。
これらのインタフェース間には次のような継承関係があります。 ![]() Channelインタフェースはすべてのチャネルの基本となるインタフェースです。チャネルが開いているかどうかを調べるisOpenメソッドと、チャネルを閉じるcloseメソッドのみが定義されてます。
ReadableByteChannelには、チャネルからバッファにデータを読み込むreadメソッドが定義されています。このメソッドではバッファの「位置」から「リミット」までのデータをチャネルに書き込みます。
WritableByteChannelには、 バッファの内容をチャネルに書き込むwriteメソッドが定義されています。このメソッドではチャネルからデータを読み取り、バッファの「位置」以降にデータを書き込みます。最大でバッファの「位置」から「リミット」までのバイト数のデータを読み込みます。
ByteChannelはReadableByteChannelとWritableByteChannelを継承しているだけで新しいメソッドは定義されていません。 ScatteringByteChannelはReadableByteChannelを継承しており、複数のバッファにデータを連続して読み込むメソッドが定義されています。配列の各要素を引数としてReadableByteChannelのreadメソッドを連続して実行するのと同じような動作をします。offsetとlengthを指定すると、バッファ配列の一部分だけを対象とすることができます(dsts[offset] dsts[offset+length-1]が対象となります)。
GatheringByteChannelはWritableByteChannelを継承しており、複数のバッファのデータを連続してチャネルに書き込むメソッドが定義されています。ReadableByteChannelと同じようにバッファ配列の一部分だけを対象とすることもできます。
InterruptibleChannelはChannelを継承しています。InterruptibleChannelのclose()メソッドは、別のスレッドが同じチャネルの入出力操作でブロック状態であったとしても、その処理を中断してチャネルを閉じることができます。ブロック状態にあったスレッドではjava.nio.channelsAsynchronousCloseExceptionが発生します。
|
![]()
![]()
|