
我已经添加了日志来在将数据写入套接字时写入字节数(如果我能正确分辨,则以4kb的块为单位)然后上传.
问题在于,虽然每次写入一大块数据时我都会在输出流上调用flush,但在将~800kb写入输出流之前,似乎没有任何内容上传.一旦它到达那一点,它似乎上传~100kb,然后应用程序然后将另一个100kb写入输出流(就像它释放的空间,可以写一点)并继续.
结果是(超过1.2mb文件)第一个800kb几乎立即被写入/报告,然后它开始上传(通过查尔斯网络软件跟踪),然后开始读取/写入/上传100kb的下一个几秒钟,然后一旦我将最后的字节写入输出流,应用程序报告100%的上传写入.这个问题是正确的,因为网络客户端仍在上传仍然在网络缓冲区中的最后800kb,并且它在那里再上传5-10秒,然后完成请求.
有没有人有过这种经历,或者知道这是否是okhttp中的常见问题?
干杯
编辑:如果我上传一个小于800kb的文件,我已经测试了大约250kb和500kb,他们都被上传后立即100%写入流,但3mb图像仍将上传800kb,然后在大约100kb块中打勾并且写入循环在那里写入另外100kb每次一些上传.
解决方法 套接字发送缓冲区默认为高值,并且未连接flush.我试图找到一种同步 Java套接字的方法是不成功的,默认的Socket OutputStream忽略了刷新.https://github.com/square/okhttp/issues/1078
可怕的Hack fork在这里设置发送缓冲区大小:https://github.com/ACMEAtronOmatic/okhttp/tree/topic/hack-to-fix-socket-sendbuffer-size
总结以上是内存溢出为你收集整理的android – OkHttp在上传数据之前缓冲~800kb尽管flush()全部内容,希望文章能够帮你解决android – OkHttp在上传数据之前缓冲~800kb尽管flush()所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)