JavaTM 2 Platform
Standard Ed. 5.0

java.nio.channels
インタフェース GatheringByteChannel

すべてのスーパーインタフェース:
Channel, Closeable, WritableByteChannel
既知の実装クラスの一覧:
DatagramChannel, FileChannel, Pipe.SinkChannel, SocketChannel

public interface GatheringByteChannel
extends WritableByteChannel

バッファシーケンスからバイトを書き込むことができるチャネルです。

「集中」書き込み操作は、1 回の呼び出しで、指定されたバッファシーケンス (複数可) から単一のバイトシーケンスを書き込みます。通常、集中書き込みは、特定のネットワークプロトコルやファイル形式 (データを 1 個以上の固定長ヘッダと可変長の本体からなるセグメントにまとめる働きを持つものなど) を実装する場合に役立ちます。これに類似した「分散」読み込み操作は、ScatteringByteChannel インタフェースに定義されています。

導入されたバージョン:
1.4

メソッドの概要
 long write(ByteBuffer[] srcs)
          このチャネルのバイトシーケンスを指定されたバッファから書き出します。
 long write(ByteBuffer[] srcs, int offset, int length)
          このチャネルのバイトシーケンスを指定されたバッファのサブシーケンスから書き出します。
 
インタフェース java.nio.channels.WritableByteChannel から継承されたメソッド
write
 
インタフェース java.nio.channels.Channel から継承されたメソッド
close, isOpen
 

メソッドの詳細

write

long write(ByteBuffer[] srcs,
           int offset,
           int length)
           throws IOException
このチャネルのバイトシーケンスを指定されたバッファのサブシーケンスから書き出します。

このチャネルに最大 r バイトを書き込もうとします。r は、このメソッドの呼び出し時に指定されたバッファ配列の指定されたサブシーケンスに含まれる合計バイト数です。

 srcs[offset].remaining() + srcs[offset+1].remaining() + ... + srcs[offset+length-1].remaining()

長さ n (0 <= n <= r) のバイトシーケンスが書き込まれるとします。このシーケンスの最初の srcs[offset].remaining()バイトまでがバッファ srcs[offset] に書き込まれ、次の srcs[offset+1].remaining() バイトがバッファ srcs[offset] からバッファ srcs[offset+1] に書き込まれます。この処理は、バイトシーケンス全部が書き込まれるまで繰り返されます。各バッファから最大限のバイトが書き込まれるため、更新された個々のバッファの最終的な位置は、最終更新バッファを除いて、このバッファのリミットと等しくなります。

特に指定がないかぎり、要求された r バイトがすべて書き込まれると書き込み操作は終了します。チャネルの種類によっては、その状態に応じて、一部のバイトしか書き込まれない場合や、まったく書き込みが行われない場合もあります。たとえば非ブロックモードのソケットチャネルでは、ソケットの出力バッファ内のバイト数が最大書き込みバイト数になります。

このメソッドはいつでも呼び出せます。ただし、ほかのスレッドがこのチャネルに対して書き込み操作を開始している場合、このメソッドの呼び出しは最初の操作が終わるまでブロックされます。

パラメータ:
srcs - バイトの取得先バッファ
offset - 最初のバイトの取得先となるバッファ配列内のオフセット。srcs.length 以下のゼロまたは正の数
length - アクセス可能な最大バッファ数。srcs.length - offset 以下のゼロまたは正の数
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
IndexOutOfBoundsException - offset パラメータと length パラメータの前提条件が満たされていない場合
NonWritableChannelException - このチャネルが書き込み可能でない場合
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 書き込み中に別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

write

long write(ByteBuffer[] srcs)
           throws IOException
このチャネルのバイトシーケンスを指定されたバッファから書き出します。

このメソッドを c.write(srcs) の形式で呼び出した場合、次の呼び出しと同じ結果が得られます。

 c.write(srcs, 0, srcs.length);

パラメータ:
srcs - バイトの取得先バッファ
戻り値:
書き込まれるバイト数。ゼロの場合もある
例外:
NonWritableChannelException - このチャネルが書き込み可能でない場合
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 書き込み中に別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込み状態が設定された場合
IOException - その他の入出力エラーが発生した場合

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。