3

Android アプリに与えられたメモリ容量よりも大きなビデオ ファイルをダウンロードしています。*デバイス上にある場合、MediaPlayer はそれらを非常に適切に処理するため、全体のサイズは問題になりません。問題は、byte[] が取り得る比較的少数のメガバイト数を超えると、それらをダウンロードするときに恐ろしい OutOfMemory 例外が発生することです。

私の意図した解決策は、着信バイトストリームをSDカードに直接書き込むことですが、Apache Commonsライブラリを使用しており、私が行っている方法では、ビデオを返す前にビデオ全体を読み込もうとしています.

私のコードは次のようになります。

HttpClient client = new HttpClient();
    PostMethod filePost = new PostMethod(URL_PATH);
    client.setConnectionTimeout(timeout);
    byte [] ret ;
    try{                        
        if(nvpArray != null)
            filePost.setRequestBody(nvpArray);                   
    }catch(Exception e){
        Log.d(TAG, "download failed: " + e.toString());
    }              
    try{            
        responseCode = client.executeMethod(filePost);          
        Log.d(TAG,"statusCode>>>" + responseCode);
        ret = filePost.getResponseBody();
....     

バイト ストリームを一度に 1 バイトずつ取得し、それをディスクに書き出す別の方法に興味があります。

4

1 に答える 1

3

PostMethod オブジェクトの GetResponseBodyAsStream メソッドを使用して、ファイルにストリーミングできるはずです。これはテストされていない例です....

InputStream inputStream = filePost.getResponseBodyAsStream();
FileInputStream outputStream = new FileInputStream(destination);

// Per your question the buffer is set to 1 byte, but you should be able to use
// a larger buffer.
byte[] buffer = new byte[1]; 
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1)
{
    outputStream.write(buffer, 0, bytesRead);
}

outputStream.close();
inputStream.close();
于 2013-09-15T03:13:08.717 に答える