OkHttp GET リクエストを使用してファイルをダウンロードしています。
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
...
OkHttpClient okClient = new OkHttpClient();
Request request = Request.Builder().url(url).get();
Response response = okClient.newCall(request).execute();
応答本文から読み取りBufferedInputStream
、バッファー サイズが 4096 の で装飾します。
BufferedInputStream in = new BufferedInputStream(response.body().byteStream(), 4096);
ただし、バッファから読み取ろうとすると、最初の読み取りで 1179 バイトが返されます。その後、一度に 2048 バイトしか読み取ることができません。
byte[] buffer = new byte[4096];
while (true) {
int bytesRead = in.read(buffer); //bytesRead is always 2048, except the first read
if (bytesRead == -1) break;
}
いくつかの関連する質問:
- 最初の読み取りで 1179 バイトが返される原因は何ですか? ある種のファイルヘッダー?
- ラッパー
InputStream
によって指定された値ではなく、2048 バイトのサイズにページングされているからの読み取りが行われるのはなぜですか?BufferedInputStream
OkHttpClient
バッファから 2048 バイト以上を読み取るように を設定する方法はありますか?