InputStream in = method.getResponseBodyAsStream();
byte[] testBytes = new byte[in.available()];
while (in.read(testBytes) != -1) {
filesize += testBytes.length;
testBytes = new byte[in.available()];
}
我用断点可以看到 in 里面contentLength有值,也就是文件的大小但是开始while计算文件的大小就不行了以上代码 我在项目中调用执行到while部分就不执行了 ,但是用main还是调用的时候就可以输出文件大小项目中调用和main函数中换入的参数一样请各位指点
byte[] testBytes = new byte[in.available()];
while (in.read(testBytes) != -1) {
filesize += testBytes.length;
testBytes = new byte[in.available()];
}
我用断点可以看到 in 里面contentLength有值,也就是文件的大小但是开始while计算文件的大小就不行了以上代码 我在项目中调用执行到while部分就不执行了 ,但是用main还是调用的时候就可以输出文件大小项目中调用和main函数中换入的参数一样请各位指点
去掉 testBytes = new byte[in.available()];你放在while中相当于无限创建新的缓存,每次重新开始读,while(in.read(testBytes) != -1) 永远为false,返回不了-1;
我用main函数测试的时候,可以准确的获取到文件的大小在项目方法中调用的时候,进入循环以后 就如同 泥牛入海一样用断点跟踪也是,到循环以后就没了
我用main函数测试的时候,可以准确的获取到文件的大小在项目方法中调用的时候,进入循环以后 就如同 泥牛入海一样用断点跟踪也是,到循环以后就没了
上面说错了一点;就是in.available()在到达文件末尾时返回0;
所以testBytes = new byte[in.available()];会得到一个长度为0的数组, while (in.read(testBytes) != -1) 会进入一个 死循环;不是因为 每次重新开始读...
byte[] responseBody = getMethod.getResponseBody();
计算responseBody的长度不就是content的长度么。
对于网络流来说,这个是不确定的,所以你不能使用这个方法来判断读取数据长度我想断点测试不好测,main方法中能用说明不是你们说的死循环可以试试这个方法
byte[] buf1 = new byte[1024];
int len = -1;
int count=0;
while ((len = is1.read(buf1)) != -1) {
byte[] buf2 = new byte[len];
try {
is2.readFully(buf2);
count+=len;
} catch (Exception e) {}
System.out.println("count"+count);
is2.readFully(buf2);
count+=len;
} catch (Exception e) {}替换为count+=len;