1

Androidアプリでhttp-postを使用してアップロード(バイナリ/ jpg)の移動平均を計算することに本当に絶望しています。

私は出力ストリームとしてDataOutputStreamを使用しています:

while (true) {
    while(bufferSize > 0) {
        int transferedBytes = Math.min(bufferSize, packetSize);
        outputStream.write(buffer, offset, transferedBytes);
        outputStream.flush();
        // save transferedBytes as throughput
        offset += transferedBytes;
        bufferSize -= transferedBytes;
    }

    if ((available = inputStream.available()) <= 0) {
        break;
    }
    int nBytes = Math.min(avail, bufferSize);
    bufferSize = inputStream.read(buffer, 0, nBytes);
    offset = 0;
} 

この実装ではアップロードは正常に機能していますが、前述の行は 500 ミリ秒未満で実行されます (ファイルは 1 MB)。実際のアップロードは次の行で実行されるようです (約 11000ms かかります)。

int responseCode = connection.getResponseCode();

上記のコードで問題を解決できないようです。私がやりたいことができるアプローチはありますか?Apache の HttpCore にはそのような機能があると聞いたことがありますが、役立つと思われる方法やドキュメントは見つかりませんでした。

これを行う方法を知っている人はいますか?

4

1 に答える 1

1

必ず使用してください。setChunkedStreamingMode(int)そうしないと、接続を閉じて、発生しているように見える応答コードを取り戻そうとするまで、応答本文がメモリにバッファリングされます。

setChunkedStreamingModeのAndroidドキュメント

于 2012-12-04T18:54:26.343 に答える