2012-03-30 73 views
1

最近,我嘗試使用google-api-java-client庫來訪問Google文檔。我可以使用此庫來獲取列表,創建新文檔併成功更新。但是,當我想從Google文檔下載大文件(> 10mb)時,會導致OutOfMemoryError。如何使用google-api-java-client在Android上下載大文件?

03-30 17:57:10.650: E/AndroidRuntime(11022): java.lang.OutOfMemoryError 
03-30 17:57:10.650: E/AndroidRuntime(11022): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91) 
03-30 17:57:10.650: E/AndroidRuntime(11022): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201) 
03-30 17:57:10.650: E/AndroidRuntime(11022): at com.google.api.client.http.AbstractInputStreamContent.copy(AbstractInputStreamContent.java:213) 
03-30 17:57:10.650: E/AndroidRuntime(11022): at com.google.api.client.http.AbstractInputStreamContent.copy(AbstractInputStreamContent.java:179) 
03-30 17:57:10.650: E/AndroidRuntime(11022): at com.google.api.client.http.HttpResponse.getContent(HttpResponse.java:384) 

這是我的代碼:

try { 
    ... 
    HttpRequest request = getRequestFactory().buildGetRequest(link); 
    HttpResponse response = request.execute(); 
    InputStream is = response.getContent(); 
    ... 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

響應代碼是200,它可以在小文件成功運行。 有沒有什麼方法使用google-api-java-client下載大文件?

+0

我認爲,你在你的代碼,那裏的三個點現在,是相關的部分。如果文件太大,則必須將其傳輸到文件系統,因爲您無法將其保存在內存中。 – koma 2012-03-30 12:12:59

+0

我發現問題是api函數response.getContent(),它使用ByteArrayOutputStream保存文件數據。所以當文件太大時,會導致OutOfMemoryError。 – bukiya 2012-04-03 01:43:59

回答