我正在使用 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 个字节?