2017-02-16 98 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(); 
      } 
    } 
} 

請檢查它是否適用於您的情況。