【问题标题】:Upload large files to the Google Drive将大文件上传到 Google 云端硬盘
【发布时间】:2017-03-09 14:55:52
【问题描述】:

在我的应用程序中,我使用 GD API 将文件上传到谷歌驱动器。它适用于小文件大小,但当文件大小很大(例如: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) {                   
} 

【问题讨论】:

  • 毫无疑问需要使用更小的缓冲区,分块写入。
  • 你能举个例子吗?

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


【解决方案1】:

这一行将分配 200 MB 的 RAM,肯定会导致 OutOfMemoryError 异常:

byte[] photoBytes = baos.toByteArray();

你为什么不直接写信给你的outputStream

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

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多