私はAsynchronousFileChannelを使ってデータを読み込みます。次のように は、データを読み出すため、私は2つの読み出し方法を発見した:以下のように指定されたJavaのドキュメントとしてAsynchronousFileChannelでCompletionHandlerを使用してデータを読み取るのはどうですか?
//1.
Future<Integer> java.nio.channels.AsynchronousFileChannel.read(ByteBuffer dst, long position);
//2.
void java.nio.channels.AsynchronousFileChannel.read(ByteBuffer dst, long position, A attachment, CompletionHandler<Integer, ? super A> handler)
、関数の第三のパラメータとして使用されるCompletionHandlerに関する情報がない。
このチャネルから指定されたファイル位置から開始して、指定されたバッファに一連のバイトを読み込みます。
このメソッドは、指定されたファイル位置から開始して、このチャネルから指定されたバッファへのバイトシーケンスの読み取りを開始します。読み込みの結果、読み込まれたバイト数が返されます。読み込みが試行された時点で、指定された位置がファイルのサイズ以上である場合は-1です。
このメソッドは、AsynchronousByteChannel.read(ByteBuffer、Object、CompletionHandler)メソッドと同じ方法で動作しますが、指定されたファイル位置からバイトが読み込まれる点が異なります。指定されたファイルの位置が、読み込みが試行された時点でのファイルのサイズより大きい場合、バイトは読み込まれません。
誰でも私に3番目のパラメータとCompletionHandlerの動作例について教えていただけますか?なぜCompletionHandlerを必要とし、その使用法は何ですか?ここで
*非同期*読み取り操作がいつ終了したかをどのように知っていますか? #1では、あなたは 'Future'を取得し、#2では、完了したときにあなた自身のCompletionHandlerを渡します。関連項目https://docs.oracle.com/javase/7/docs/api/java/nio/channels/CompletionHandler.html –
JimmyB
[Javadoc](https://docs.oracle.com/javase/7/)から、 "read(java.nio.ByteBuffer、%20A、%20java.nio.channels.CompletionHandler))):"ハンドラパラメータは、読み込み時に呼び出される補完ハンドラです完了ハンドラに渡される結果は、読み込まれたバイト数です。チャネルがストリームの終わりに達したために読み込めるバイトがない場合は-1です。 –