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函数中换入的参数一样请各位指点

解决方案 »

  1.   

    如果代码测试可行,不管在哪个方法中运行都是一样的;不过楼主的代码是有问题的,会死循环,不知道怎么说main方法可以的:
    去掉    testBytes = new byte[in.available()];你放在while中相当于无限创建新的缓存,每次重新开始读,while(in.read(testBytes) != -1) 永远为false,返回不了-1;
      

  2.   


    我用main函数测试的时候,可以准确的获取到文件的大小在项目方法中调用的时候,进入循环以后 就如同 泥牛入海一样用断点跟踪也是,到循环以后就没了
      

  3.   


    我用main函数测试的时候,可以准确的获取到文件的大小在项目方法中调用的时候,进入循环以后 就如同 泥牛入海一样用断点跟踪也是,到循环以后就没了
      

  4.   


    上面说错了一点;就是in.available()在到达文件末尾时返回0;
    所以testBytes = new byte[in.available()];会得到一个长度为0的数组, while (in.read(testBytes) != -1) 会进入一个 死循环;不是因为 每次重新开始读...
     
      

  5.   

    in.read(testBytes)如果testBytes的长度为0,会返回0;所以是死循环;
      

  6.   

    笨啊,用method的getResponseBody方法直接就可以获取到content了么,有了content的字符数组,计算长度肯定没问题啊
    byte[] responseBody = getMethod.getResponseBody();
    计算responseBody的长度不就是content的长度么。
      

  7.   

    in.available()  available是表示在不阻塞的情况下,还可以读取多少个字节。而不是指这个流还有多长! 
    对于网络流来说,这个是不确定的,所以你不能使用这个方法来判断读取数据长度我想断点测试不好测,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);
      

  8.   

    sorry 下面不用了try {
      is2.readFully(buf2);
      count+=len;
    } catch (Exception e) {}替换为count+=len;