pur*_*man 2 java security inputstream
我在下面的代码中得到了“未发布的资源流”的强化发现。
Resource[] l_objResource = resourceLoader.getResources(configErrorCode);
Properties l_objProperty = null;
for (int i = 0; i < l_objResource.length; i++) {
l_objProperty = new Properties();
l_objProperty.load(l_objResource[i].getInputStream());
}
Run Code Online (Sandbox Code Playgroud)
该函数loadErrorCode()有时BaseErrorParser.java无法释放由getInputStream();
任何人都可以解释这一发现或帮助解决问题吗?
来自下面的评论,但上下文不清楚(JW):
ObjectInputStream l_objObjInputStream = null;
Map l_mapRet = null;
try {
l_objObjInputStream = new ObjectInputStream(new FileInputStream(p_objFilename));
Object l_objTemp = l_objObjInputStream.readObject();
l_mapRet = (Map) l_objTemp;
} finally {
if (l_objObjInputStream != null) {
l_objObjInputStream.close();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您没有关闭由以下代码行打开的输入流
l_objResource[i].getInputStream();
Run Code Online (Sandbox Code Playgroud)
如果有任何输入或输出流在使用后打开但未关闭,通常强化扫描仪会报告未释放的资源流问题。处理这些问题的理想方法是关闭finally块中所有打开的流,这样即使在异常情况下它们也不会产生任何问题。
您可以尝试 -finally 阻止代码并关闭流,如下所示。
Resource[] l_objResource = resourceLoader.getResources(configErrorCode);
Properties l_objProperty = null;
InputStream is = null;
for (int i = 0; i < l_objResource.length; i++) {
l_objProperty = new Properties();
try {
is = l_objResource[i].getInputStream();
l_objProperty.load(is);
} finally {
if(is!=null) {
is.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
请检查它是否适用于您的情况。
| 归档时间: |
|
| 查看次数: |
31297 次 |
| 最近记录: |