当前位置: 首页 > 知识库问答 >
问题:

为什么我一次只能从OKHTTP.Response InputStream读取2048个字节?

仲孙超
2023-03-14
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 in = new BufferedInputStream(response.body().byteStream(), 4096);
byte[] buffer = new byte[4096];
while (true) {
    int bytesRead = in.read(buffer); //bytesRead is always 2048, except the first read
    if (bytesRead == -1) break;
}

几个相关问题:

  1. 是什么导致第一次读取返回1179字节?某种文件头?
  2. 为什么从InputStream中读取的内容分页到2048字节的大小,而不是BufferedInputStream包装指定的值?
  3. 是否有方法将OKHttpClient配置为从缓冲区读取2048字节以上?

共有1个答案

樊令秋
2023-03-14

是什么导致第一次读取返回1179字节?某种文件头?

您正在读取的响应的HTTP头是869字节。

为什么从InputStream读取的内容被分页到2048字节的大小,而不是BufferedInputStream包装器指定的值?

您必须深入研究BufferedInputStream以找出为什么它没有将两个页面连接在一起。

OkHttp的InputStream正在处理2048个块,因为它使用这些块的池来保存分配。

有没有办法配置OkHttpClient从缓冲区读取2048个字节以上的内容?

 类似资料:
  • 问题内容: 我们有一个node.js服务器,该服务器将REST API实施为中央服务器的代理,而中央服务器具有一个略有不同且不对称的REST API。 我们的客户端运行在各种浏览器中,它要求节点服务器从中央服务器获取任务。节点服务器从中央服务器获取所有任务ID的列表,并将其返回给客户端。然后,客户端通过代理对每个ID进行两次REST API调用。 据我所知,这些工作都是异步完成的。在控制台日志中,

  • 我绝望了,。。。我已经试了很多次了,没有运气。请帮忙 背景知识:我使用raspberry Pi 3开发了一个网络摄像头流媒体服务器,因为我不想要可用的服务器。使用raspistill时,fps非常低(4fps),这就是为什么我考虑使用v4l2选项来流式传输网络摄像机。为此,我将mjpeg视频输出到管道中。 从该管道读取时,将显示第一个jpeg图像,但连续读取返回null。 为了进一步调查这一点,我

  • 我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?

  • 我遇到了这个问题,我正在使用请求,然后它正在清除该请求。因此,当我在过滤器链中向前传递它时,它以空值的形式传递请求。 我能够通过以下类似的解决方案来解决这个问题: 如何在Spring'HandlerMachodArgumentResolver'中多次读取请求正文? 我的问题是,为什么不允许我们多次阅读该请求?

  • 我是完全新的Web API的,并试图建立一个Android应用程序观看谷歌联系人。我被Oauth的第一步卡住了。我已经完成了登录按钮和授权。按钮工作正常,我可以登录我的谷歌账户,但当我试图从这个账户获得一些东西时,日志猫打印了这个按摩“I/System_Server:oneway函数结果将被删除,但以状态OK和包裹大小结束”。为什么会这样?因为auth令牌不再有效?如何恢复权限?我应该如何从帐户获

  • 我正在使用Reverfit2,我试图从我用Python制作的Web服务中请求一些数据。 实际上,它抛出了一个“java.lang.IllegalStateException”,但是当我调用GET方法时,API返回代码200,而且我还可以看到用于调试响应JSON的打印版本。问题是Call方法,因为它总是在failure时执行。 求求你,救命! 这是我的(简单的)Python Web服务,API-Pr