2017-11-23 9 views
0

AsynchronousChannelのAPIの説明によると、AsynchronousFileChannelが実装されています。AsynchronousFileChannelのクローズ方法

このチャンネルの未処理の非同期操作はすべて、例外AsynchronousCloseExceptionで完了します。私の理解からそう

それを閉じるための正しい方法は、私がAsynchronousFileChannelを通じてファイルを書き込むつもりならば、 はAsynchronousFileChannel.writeに渡されCompletionHandlerclose()の呼び出しを置くと言うことです。しかし、どのように ハンドラにチャネルを渡すには本当に私を混乱させる。ハンドラの添付ファイルとして渡す必要がありますか?誰も私にサンプルコードを提供できますか?

答えて

0

アタッチメント

Path path = Paths.get("hello_world.txt"); 
    path.toFile().createNewFile(); 

    AsynchronousFileChannel channel = AsynchronousFileChannel.open(path, StandardOpenOption.WRITE); 
    channel.write(ByteBuffer.wrap("hello".getBytes()), 0, channel, new CompletionHandler<Integer, Closeable>() { 
     @Override 
     public void completed(Integer result, Closeable closeMe) { 
      System.out.println("Written: " + result); 
      try { 
       closeMe.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void failed(Throwable exc, Closeable closeMe) { 
      System.err.println("Error occurred: " + exc); 
      try { 
       closeMe.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    //wait for async task to complete 
    Thread.sleep(5000L); 
ようにチャネルオブジェクトを渡し
関連する問題