2017-03-09 327 views
0

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

这是我的代码:

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) {     
} 
+0

毫无疑问,你需要使用一个较小的缓冲区,通过块写入。 –

+0

你能举一些例子吗? –

回答

2

这条线将分配200 MB的RAM和肯定会产生的OutOfMemoryError异常:

byte[] photoBytes = baos.toByteArray(); 

你为什么不直接写您的outputStream

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