zoukankan      html  css  js  c++  java
  • 化繁就简,迎接2012的第一天!

    化繁就简,迎接2012的第一天!

    在下载网络图片的时候,一块很大的图片,你当然不可能一次下载完成,当然要块byte再紧接着块byte的下载

    问题由此产生.....问题代码如下:

      using (var stream = response.GetResponseStream())
                    {
                        int length = (int)response.ContentLength;
                        byte[] bytes = new byte[length];
                        int numBytesToRead = (int)length;
                        int numBytesRead = 0;

                        int readcount = 2000;
                        while (numBytesToRead > 0)
                        {
                                                 // Read may return anything from 0 to 10.
                            int n = stream.Read(bytes, numBytesRead, readcount);
                            // The end of the file is reached.
                            if (n == 0)
                            {
                                return bytes;
                            }
                            numBytesRead += n;
                            numBytesToRead -= n;
                        }
                        return bytes;
                    }
     大家没有注意到,当我们下载的时候,你读取请求的长度,是不能超过文件本身长度的,所以你请求指定位置的内容,不能超过它总的文件长度. (这个是http协议自身决定的,当然也可以在修改这个服务端的协议,一些大的公司,会在这细节上做修改)

    正确的代码就是你在读取最后一块内容结束指定的长度为

                         if (numBytesRead + 2000 > length)
                            {
                                readcount = length - numBytesRead;
                            }

      华丽的分割线,以开始我2012年的第一天!

  • 相关阅读:
    boot文件上传的坑
    页面前端获取时间和数据库获取时间差八个小时 CST
    springcloud 学习
    springcloud 的eureka服务
    ROWNUM()应用案例-实现一个拉链表
    python dict 常用操作
    【转】团队项目的Git分支管理规范
    Python中使用cx_Oracle调用Oracle存储过程
    【转载】ORACLE 物化视图
    C# 加密解密
  • 原文地址:https://www.cnblogs.com/chenli0513/p/2309399.html
Copyright © 2011-2022 走看看