为了解决问题,偶然发现一个奇怪的地方:就是使用try-with-resource机制的代码编译后,使用jd-gui反编译文件出现// ERROR //,但是程序运行却是正常的

  进一步确认后发现:如果try语句中只有一个定义时,反编译后也不会报错(如果有两个可以嵌套try语句);而且编译完以后的代码跟正常的代码编译完后的差距很大。

 

以下是测试证明:

 原始的写法举例

public byte[] file2byte(String filePath) {
    byte[] buffer = null;
    File file = new File(filePath);
    FileInputStream fis = null;
    ByteArrayOutputStream bos = null;
    try {
        fis = new FileInputStream(file);
        bos = new ByteArrayOutputStream();
        byte[] b = new byte[1024];
        int n;
        while ((n = fis.read(b)) != -1) {
            bos.write(b, 0, n);
        }
        buffer = bos.toByteArray();
    } catch (Exception e) {
        // e.printStackTrace();
    } finally{
        try {
            if(fis != null){
                fis.close();
            }
            if(bos != null){
                bos.close();
            }
        } catch (IOException e) {
            //e.printStackTrace();
        }
    }
    return buffer;
}
View Code

相关文章: