2013-07-01 2 views
1

У меня есть два процесса от файла к строкам в моем приложении (один фактически имеет дело с файлом активов).
Если я повторяю один из этих процессов несколько раз в одном файле, я получаю OutOfMemoryErrors.
Я подозреваю, что это может быть из-за того, что я не закрываю потоки должным образом и поэтому могу создать несколько потоков, и это может привести к тому, что у моего приложения закончится нехватка памяти.
Вот код из двух процессов:

Как правильно закрыть поток ввода строки в строку? (IOUtils FileUtils)

Мой процесс активов файла в строку.
Как вы можете видеть, у меня есть что-то на месте, чтобы закрыть поток, но я не знаю, правильно ли оно отформатировано.

try 
{ 
     myVeryLargeString = IOUtils.toString(getAssets().open(myAssetsFilePath), "UTF-8"); 
     IOUtils.closeQuietly(getAssets().open(myAssetsFilePath)); 
} 
catch (IOException e) 
{ 
     e.printStackTrace(); 
} 
catch(OutOfMemoryError e) 
{ 
     Log.e(TAG, "Ran out of memory 01"); 
} 



Мой процесс файла в строку.
Я понятия не имею, как закрыть этот поток (если есть даже поток для закрытия вообще).

myFile01 = new File(myFilePath); 
try 
{ 
     myVeryLargeString = FileUtils.readFileToString(myFile01, "UTF-8"); 
} 
catch (IOException e) 
{ 
     e.printStackTrace(); 
} 
catch(OutOfMemoryError e) 
{ 
     Log.e(TAG, "Ran out of memory 02"); 
} 
+0

IOUtils и FileUtils является ваш класс ?? –

+0

Я предполагаю, что вы открываете поток дважды, затем закрываете его 'getAssets(). Open (myAssetsFilePath)' смотрит подозреваемый – BevynQ

+0

Рассмотрите возможность размещения вызовов 'close()' в блоке 'finally'. –

ответ

3

Это трудно сказать, что может привести к OOME, но закрытие должно быть, как это

InputStream is = getAssets().open(myAssetsFilePath); 
try { 
    myVeryLargeString = IOUtils.toString(is, "UTF-8"); 
} finally { 
    IOUtils.closeQuietly(is); 
} 
+0

Благодарим вас за ответ. У вас также есть предложение закрыть второй процесс, который я опубликовал? (процесс FileUtils) Есть ли даже поток, который должен быть закрыт в этом? –

+1

Нет, FileUtils.readFileToString внутренне закрывает InputStream –

+0

Eclipse не позволяет мне использовать этот формат. Он хочет, чтобы часть getAssets() находилась внутри try/catch. –

Смежные вопросы