java.nio.channels.AsynchronousFileChannel提供两种从文件中读取数据的方法:
read(dst, position, attachment, handler)完成后将调用提供的处理程序read(dst, position)返回一个Future允许我get()得到操作结果的
CompletionHandler接口指定了一个方法failed(Throwable exc, A attachment),而没有Future。它只能选择ExecutionException从其get()方法中抛出一个。
假设我从片状磁盘上读取文件,并且磁盘抛出 IO-Error,在这两种情况下将如何处理?
具体来说,我有以下 3 个问题:
- 会调用
failed()上的方法吗?CompletionHandler或者它会将操作指示为completed的结果-1? - 该
get()方法会Future抛出异常,还是会简单地-1作为读取结果返回? - 如果
-1在任何一种情况下都返回,我如何区分 IO-Error 和简单的 EOF 条件(最好没有像操作计时这样的黑客攻击)?
出于某种原因,我找不到任何关于此的文档...