2017-02-16 42 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; Карта l_mapRet = null; try { l_objObjInputStream = new ObjectInputStream (новый FileInputStream (p_objFilename)); Объект l_objTemp = l_objObjInputStream.readObject(); l_mapRet = (Карта) l_objTemp; } finally { if (l_objObjInputStream! = Null) { l_objObjInputStream.close(); } } Я получаю код выше, так как укрепляют нереализованный поток ресурсов – purushothaman

+0

Функция loadObjectFromFile() в BusinessObjectData.java иногда не может освободить системный ресурс, выделенный 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(); 
      } 
    } 
} 

Проверьте, работает ли оно в вашем случае.