我遇到了一个令人不安的情况,我希望Java抱怨(通过IllegalArgumentExceptionfrom Throwable.addSuppressed)两次抛出相同的异常,一次来自try-with-resources块,一次来自AutoCloseable类的close()例程.我在下面创建了一个简单的测试用例,突出了问题.
我使用以下代码运行JDK 1.7.0_65:
public class TestDoubleThrow {
public static void main(String[] args) {
class TestA implements AutoCloseable {
RuntimeException e;
public TestA(RuntimeException e) { this.e = e; }
@Override public void close() { throw e; }
}
RuntimeException e = new RuntimeException("My Exception");
try (TestA A = new TestA(e)) {
throw e;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我通过命令行编译并运行上面的代码时,我得到了预期的结果,这个错误表明我试图自我抑制和异常:
[coreys terminal]$ java TestDoubleThrow.java ; java TestDoubleThrow
Exception in thread "main" java.lang.IllegalArgumentException: Self-suppression not permitted
at …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在linux中生成短读取的方法,因此我可以对它们周围的处理代码进行单元测试.
我有许多方法,在较低级别调用pread/pread64从文件系统中的文件读取.这些设计用于处理发生短读取的情况(读取的字节数小于请求的数量).
我见过发生短读取的情况(跨网络文件系统).
理想情况下,我将能够创建一个允许读取N个字节的文件,然后将发生M字节的短读取,然后按预期进行正常读取.这将允许单元测试指向文件/文件系统.
谢谢!