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下載大文件?
我認爲,你在你的代碼,那裏的三個點現在,是相關的部分。如果文件太大,則必須將其傳輸到文件系統,因爲您無法將其保存在內存中。 – koma 2012-03-30 12:12:59
我發現問題是api函數response.getContent(),它使用ByteArrayOutputStream保存文件數據。所以當文件太大時,會導致OutOfMemoryError。 – bukiya 2012-04-03 01:43:59