OutOfMemory使用Java SDK API从Google云端硬盘下载文件时出错

时间:2017-01-19 06:55:01

标签: java google-drive-api java-io

我使用谷歌驱动JAVA SDK API下载下面的文件是代码,getGoogleDriveServiceInstance()方法将在下面的代码中返回Drive实例。此代码适用于小文件,但对于文件> 500 MB我的内存不足错误,我需要一些帮助来解决这个问题。

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;
    }

如果文件大小很大,则会出现以下错误 - >

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 个答案:

答案 0 :(得分:2)

请参阅https://developers.google.com/api-client-library/java/google-api-java-client/media-download说明"当您从服务器下载大型媒体文件时,请使用可恢复媒体下载按块"下载文件块。