使用okhttp时Android DownloadManager的行为

使用okhttp时Android DownloadManager的行为,android,okhttp,Android,Okhttp,当出现异常时,为什么RealBufferedSource(FixedLengthSource)的BufferSize从65536字节更改为2048字节 关于Downloadmanager代码,我面临的两个问题如下:(我是这个论坛的新手。如果需要更多信息,请告诉我) 问题1: android的DownloadManager(又称DownloadThread)更新一次,读取65536字节,共4次。这个实现在哪里完成?对不起,我找不到做这件事的地方。此更新的具体原因是下载线程一次,每次读取4次 在错误

当出现异常时,为什么RealBufferedSource(FixedLengthSource)的BufferSize从65536字节更改为2048字节

关于Downloadmanager代码,我面临的两个问题如下:(我是这个论坛的新手。如果需要更多信息,请告诉我)

问题1:

android的DownloadManager(又称DownloadThread)更新一次,读取65536字节,共4次。这个实现在哪里完成?对不起,我找不到做这件事的地方。此更新的具体原因是下载线程一次,每次读取4次

在错误场景中,如果我从DownloadManager执行部分HTTP fetch请求,则Range:request将使用上次更新的currentBytes值。因此,如果中间发生错误(例如,第4次读取中的第2次),Range:request将与先前更新的currentBytes一起执行,这可能会再次读取相同的字节

//HC:HttpConnection.java,FixedLengthSource#读取添加打印的位置

19:09:10.374  System.out: (HTTPLog)-Thread-270-223795676: Content-Length : 70610220
19:09:10.684  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70610220,65536
19:09:10.694  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70593836,65536
19:09:10.704  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70577452,65536
19:09:10.704  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70561068,65536
19:09:10.714  DownloadManager: currentBytes : 65536,mLastUpdateBytes : 0

19:09:10.714  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70544684,65536
19:09:10.714  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70528300,65536
19:09:10.724  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70511916,65536
19:09:10.754  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70495532,65536
19:09:10.774  DownloadManager: currentBytes : 131072,mLastUpdateBytes : 131072

19:09:10.774  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70479148,65536
19:09:10.784  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70462764,65536
19:09:10.784  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70446380,65536
19:09:10.784  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70429996,65536
19:09:10.794  DownloadManager: currentBytes : 196608,mLastUpdateBytes : 131072

19:09:10.794  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70413612,65536
19:09:10.814  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70397228,65536
19:09:10.814  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70380844,65536
19:09:10.824  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70364460,65536
19:09:10.834  DownloadManager: currentBytes : 262144,mLastUpdateBytes : 131072
例如:

19:09:10.794  DownloadManager: currentBytes : 196608,mLastUpdateBytes : 131072
// 1st read
19:09:10.794  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70413612,65536 
// 2nd read
19:09:10.814  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 70397228,65536 
// If error happens here, the range: request for partial fetch happens using the 
// currentBytes variable as follows
System.out: (HTTPLog)-Thread-270-51176450: Range : bytes=196608-

// Ideally, it should be { [currentBytes : 196608] + [1st Read : 65536] + [2nd Read : 65536]}
System.out: (HTTPLog)-Thread-270-51176450: Range : bytes=327680- 
问题2:

当发生类似SSLException的IOException时,提取大小会自动从65536减少到2048。这个实现在哪里完成?对不起,我找不到做这件事的地方。 有没有具体的原因来避免这种降级-拥塞之类的事情

19:10:11.244  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13905628,65536 19:10:11.244  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13889244,65536 19:10:11.254  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13872860,65536 19:10:11.254  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13856476,65536 19:10:11.254  DownloadManager: currentBytes : 56754176, mLastUpdateBytes : 56360960 19:10:11.254  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13840092,65536 19:10:11.264  System.out: (HTTPLog)-Static: FixedLengthSource#read:: SSLException caught... 19:10:11.264  System.out: (HTTPLog)-Static: FixedLengthSource#read, Bytes remaining to be  downloaded : 13840092 19:10:11.264  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13840092,2048 19:10:11.284  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13838044,2048 19:10:11.284  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13835996,2048 19:10:11.284  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13833948,2048 19:10:11.294  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13831900,2048 19:10:11.294  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13829852,2048 19:10:11.294  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13827804,2048 19:10:11.294  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13825756,2048 19:10:11.304  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13823708,2048 19:10:11.304  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13821660,2048 19:10:11.304  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13819612,2048 19:10:11.314  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13817564,2048 19:10:11.314  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13815516,2048 19:10:11.314  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13813468,2048 19:10:11.314  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13811420,2048 19:10:11.314  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13809372,2048 19:10:11.314  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13807324,2048 19:10:11.324  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13805276,2048 19:10:11.324  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13803228,2048 19:10:11.324  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13801180,2048 19:10:11.324  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13799132,2048 19:10:11.324  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13797084,2048 19:10:11.324  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13795036,2048 19:10:11.334  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13792988,2048 19:10:11.334  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13790940,2048 19:10:11.334  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13788892,2048 19:10:11.334  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13786844,2048 19:10:11.334  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13784796,2048 19:10:11.334  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13782748,2048 19:10:11.344  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13780700,2048 19:10:11.344  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13778652,2048 19:10:11.354  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13776604,2048 19:10:11.364  System.out: (HTTPLog)-Static:  HC:: bytesRemaining, byteCount ::: 13774556,2048
在这种情况下,下载线程的currentBytes也不会更新此2048MM字节下载

因此,如果DownloadThread使用其可用的currentBytes进行部分提取,它最终将从服务器重新读取相同的字节,从而导致更多的数据使用。

如果我遗漏了一些基本的东西,请帮助我理解

多谢各位 公羊