Java AsynchronousFileChannel.read(…)中的异常管理

Java AsynchronousFileChannel.read(…)中的异常管理,java,file-io,asynchronous,exception-handling,Java,File Io,Asynchronous,Exception Handling,java.nio.channels.AsynchronousFileChannel提供了两种从文件读取数据的方法: read(dst、位置、附件、处理程序)将在完成时调用提供的处理程序 read(dst,position)返回一个Future,它将允许我get()操作的结果 CompletionHandler接口指定一个方法失败(Throwable exc,附件),而Future则没有。它只能从其get()方法中抛出ExecutionException 假设我从一个片状磁盘上读取一个文件,该磁盘

java.nio.channels.AsynchronousFileChannel
提供了两种从文件读取数据的方法:

  • read(dst、位置、附件、处理程序)
    将在完成时调用提供的处理程序
  • read(dst,position)
    返回一个
    Future
    ,它将允许我
    get()
    操作的结果
  • CompletionHandler
    接口指定一个方法
    失败(Throwable exc,附件)
    ,而
    Future
    则没有。它只能从其
    get()
    方法中抛出
    ExecutionException

    假设我从一个片状磁盘上读取一个文件,该磁盘抛出一个IO错误,在这两种情况下如何处理?

    具体而言,我有以下3个问题:

  • 是否调用
    CompletionHandler
    上的
    failed()
    方法?或者它是否会将操作指示为
    已完成
    ,结果为
    -1
  • Future
    上的
    get()
    方法是否会抛出异常,或者只是将
    -1
    作为读取结果返回
  • 如果在任何一种情况下都返回了
    -1
    ,我如何区分IO错误和简单的EOF条件(最好不要像黑客一样计时操作)
  • 由于某种原因,我找不到任何关于这个的文档