将大文件上传到Google云端硬盘

时间:2017-03-09 14:55:53

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

在我的应用中,我使用 GD API 将文件上传到Google云端硬盘。它适用于小文件大小,但是当文件大小很大(例如:200MB)时,它会引发java.lang.OutOfMemoryError:异常。我知道为什么它崩溃它将整个数据加载到内存中,任何人都可以建议我如何解决这个问题?

这是我的代码:

OutputStream outputStream = result.getDriveContents().getOutputStream();
FileInputStream fis;

try {
     fis = new FileInputStream(file.getPath());
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     byte[] buf = new byte[8192];
     int n;
     while (-1 != (n = fis.read(buf)))
            baos.write(buf, 0, n);
     byte[] photoBytes = baos.toByteArray();
     outputStream.write(photoBytes);

     outputStream.close();
     outputStream = null;
     fis.close();
     fis = null;
} catch (FileNotFoundException e) {                   
} 

1 个答案:

答案 0 :(得分:2)

此行将分配200 MB的RAM,并且肯定会导致OutOfMemoryError异常:

byte[] photoBytes = baos.toByteArray();

为什么不直接写信给outputStream

while (-1 != (n = fis.read(buf)))
        outputStream.write(buf, 0, n);