2017-01-19 187 views
1

我使用的是谷歌驅動器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) 
+1

提示:你有沒有想過...爲什麼我們需要流開始?爲什麼不把整個文件作爲一個簡單的對象? – Mordechai

+0

使用流,您可以讀取一點,保存在本地磁盤上,然後重複。 – Mordechai

+1

我對API不熟悉,但我想,它不是@ammu的錯,因爲調用'executeMediaAndDownloadTo(..)'時發生錯誤。可能存在大小限制,或者您可以嘗試根據需要設置較大文件的客戶端內存。你的'baos'一直在增長,直到沒有剩餘內存。除非API給出了一些選項來閱讀一點,然後寫一點,否則我覺得你很無奈。 –

回答

相關問題