我使用的是谷歌驅動器JAVA SDK API下載的文件是代碼,getGoogleDriveServiceInstance()方法將在下面的代碼中返回Drive實例。此代碼適用於小文件,但對於大於500 MB的文件,我出現內存不足錯誤,我需要一些幫助來解決此問題。OutOfMemory使用Java SDK API從Google Drive下載文件時出錯
public boolean downloadFile(String fileId, java.io.File path) {
FileOutputStream fos=null;
try{
fos = new FileOutputStream(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
getGoogleDriveServiceInstance().files().get(fileId).executeMediaAndDownloadTo(baos);
baos.writeTo(fos);
} catch(Exception ex) {
ex.printStackTrace();
return false;
} finally {
try{fos.close();fos=null;} catch(Exception ex){}
}
return true;
}
如果文件大小大,下面的錯誤是coming->
Exception in thread "Thread-22" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2271)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
at com.google.api.client.util.ByteStreams.copy(ByteStreams.java:55)
at com.google.api.client.util.IOUtils.copy(IOUtils.java:94)
at com.google.api.client.util.IOUtils.copy(IOUtils.java:63)
at com.google.api.client.googleapis.media.MediaHttpDownloader.executeCurrentRequest(MediaHttpDownloader.java:247)
at com.google.api.client.googleapis.media.MediaHttpDownloader.download(MediaHttpDownloader.java:199)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeMediaAndDownloadTo(AbstractGoogleClientRequest.java:562)
at com.google.api.services.drive.Drive$Files$Get.executeMediaAndDownloadTo(Drive.java:3560)
提示:你有沒有想過...爲什麼我們需要流開始?爲什麼不把整個文件作爲一個簡單的對象? – Mordechai
使用流,您可以讀取一點,保存在本地磁盤上,然後重複。 – Mordechai
我對API不熟悉,但我想,它不是@ammu的錯,因爲調用'executeMediaAndDownloadTo(..)'時發生錯誤。可能存在大小限制,或者您可以嘗試根據需要設置較大文件的客戶端內存。你的'baos'一直在增長,直到沒有剩餘內存。除非API給出了一些選項來閱讀一點,然後寫一點,否則我覺得你很無奈。 –