2013-07-01 11 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

'finally()'호출에'close()'호출을 두는 것을 고려하십시오. –

답변

3

그것은 오세요 발생할 수 있지만, 마감이

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 내부에 있기를 원합니다. –