0

アップロードの進行状況を知るために出力ストリームを拡張する次のクラスを使用しています。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.entity.InputStreamEntity;

public class CountingInputStreamEntity extends InputStreamEntity {

    private UploadListener listener;
    private long length;

    public CountingInputStreamEntity(InputStream instream, long length) {
        super(instream, length);
        this.length = length;
    }

    public void setUploadListener(UploadListener listener) {
        this.listener = listener;
    }

    @Override
    public void writeTo(OutputStream outstream) throws IOException {
        super.writeTo(new CountingOutputStream(outstream));
    }

    class CountingOutputStream extends OutputStream {
        private long counter = 0l;
        private OutputStream outputStream;

        public CountingOutputStream(OutputStream outputStream) {
            this.outputStream = outputStream;
        }

        @Override
        public void write(int oneByte) throws IOException {
            this.outputStream.write(oneByte);
            counter++;
            if (listener != null) {
                int percent = (int) ((counter * 100)/ length);
                listener.onChange(percent);
            }
        }
    }

    public interface UploadListener {
        public void onChange(int percent);
    }

}

呼び出しクラス:

final HttpResponse resp;
final HttpClient httpClient = new DefaultHttpClient();
final HttpPost post = new HttpPost(UPLOAD_URL);
ParcelFileDescriptor fileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r");
InputStream in = context.getContentResolver().openInputStream(uri);
CountingInputStreamEntity entity = new CountingInputStreamEntity(in, fileDescriptor.getStatSize());
entity.setListener(this);
post.setEntity(entity);
resp = httpClient.execute(post);

デフォルトでは、write メソッドの len 変数は 2048 バイトを返します。len 変数をカスタム値に変更する方法はありますか。len 変数を 64kb にしたいのですが、どうすればこれを達成できますか。誰でも問題の解決に役立ちます。

サーバーへの書き込みバイト数を増やすことはできますか?

4

0 に答える 0