2017-02-16 30 views
1

我在下面的代码中获得了“未释放资源流”的强化查找。强化安全问题“未释放资源流”

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()); 
} 

功能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(); 
    } 
} 
+0

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; (l_objObjInputStream!= null){ l_objObjInputStream.close();如果(l_objObjInputStream!= null){ } } } 正在获取代码以强化未发布资源流 – purushothaman

+0

BusinessObjectData.java中的函数loadObjectFromFile()有时无法释放由FileInputStream()分配的系统资源 – purushothaman

回答

2

您还没有闭合,其由下面的代码行

l_objResource[i].getInputStream(); 
打开输入流

如果有任何输入或输出流在使用后打开但未关闭,通常会强化扫描仪报告未释放资源流问题。处理这些问题的理想方法是在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(); 
      } 
    } 
} 

请检查它是否适用于您的情况。