2017-03-09 13 views
0

私のアプリでは、GD APIを使用してGoogleドライブにファイルをアップロードしています。小さなファイルサイズではうまく動作しますが、ファイルサイズが大きい場合(例:200MB)、それはjava.lang.OutOfMemoryError:例外をスローします。なぜ私はそれがメモリにデータ全体を読み込むクラッシュ知って誰も私はこの問題を解決することができます提案することができますか?大きなファイルをGoogleドライブにアップロード

これは私のコードです:

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

この行は、RAMの200メガバイトを割り当ててしまうと、間違いのOutOfMemoryError例外を引き起こす可能性があります:

byte[] photoBytes = baos.toByteArray(); 

は、なぜあなたは、あなたのoutputStreamに直接書き込むされません。

while (-1 != (n = fis.read(buf))) 
     outputStream.write(buf, 0, n); 
関連する問題