本篇文章为你整理了sonar代码扫描bug:Use try(sonar代码扫描什么作用)的详细内容,包含有sonar代码扫描规则及解决方案 sonar代码扫描什么作用 sonar代码扫描阻断和严重 sonar代码扫描生成pdf数不符合规定 sonar代码扫描bug:Use try,希望能帮助你了解 sonar代码扫描bug:Use try。
下面代码
/**
* 读取文件到byte数组
* @param tradeFile
* @return
public static byte[] file2byte(File tradeFile) {
try {
FileInputStream fis = new FileInputStream(tradeFile);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
fis.close();
bos.close();
byte[] buffer = bos.toByteArray();
return buffer;
} catch (Exception e) {
e.printStackTrace();
return null;
}
上面代码虽然调用了流的close方法,但可能会因中间程序异常致使文件流未关闭。如果应用程序运行过程中这个方法频繁被访问,就有可能导致频繁GC,甚至OOM错误。
SonarQube在扫描到这段代码时,会提示关闭文件流:Use try-with-resources or close this "FileInputStream" in a "finally" clause.
我们用try-with-resources语法糖的方式来改进这段代码,try-with-resouces相当于显式在finally块里调用close方法(从build后的.class文件可以看出来)。为了保证资源及时关闭,我们往往要在finally里写一堆代码,使用这个java语法糖可以让我们专注应用开发,无需关注资源释放问题(参考:深入理解 Java try-with-resource 语法糖)。如下:
public static byte[] file2byte(File tradeFile) {
try (FileInputStream fis = new FileInputStream(tradeFile);
ByteArrayOutputStream bos = new ByteArrayOutputStream()){
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
byte[] buffer = bos.toByteArray();
return buffer;
} catch (Exception e) {
e.printStackTrace();
return null;
}
当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
本文来自,转载请注明原文链接:https:///buguge/p/17171588.html
以上就是sonar代码扫描bug:Use try(sonar代码扫描什么作用)的详细内容,想要了解更多 sonar代码扫描bug:Use try的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。