1

サーバーに最大 10 MB の大きなファイルをアップロードしようとしていますが、2.3.4 ではサーバーに書き込む前にストリームが最初にメモリに書き込まれることに気付きました。大きなファイルのため、ヒープ メモリ ダンプを調べてこの動作を確認します。 OutOfMemory 例外が発生します。4.2 デバイスでは同じ動作は見られません。

以下は私が使用しているコードです:

    URL url = new URL(uri);
    connection = (HttpsURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("PUT");
    connection.setRequestProperty("content-type", "");
    connection.setRequestProperty("Accept-Encoding", "");                                    
    connection.setFixedLengthStreamingMode((int)totalBytes);
    out = new BufferedOutputStream(connection.getOutputStream());
    fis = new BufferedInputStream(new FileInputStream(file));

    byte[] buffer = new byte[32 * 1024];
    int bytesRead = 0;
    int totalBytesRead = 0;
    while ((bytesRead = fis.read(buffer)) != -1)
    {
        totalBytesRead = totalBytesRead + bytesRead;                
            out.write(buffer, 0, bytesRead);// OOM Error                
    }

    out.flush();
4

1 に答える 1