本人是个新手,最近在搞那个图形码生成技术的时候遇到以下问题:
下面这段代码不是太理解,为什么要创建一个内存数据流,数据流有什么作用?
   Response.ClearContent();为什么要清除缓冲区中的所有内容?还有最底下的那两句代码都不是太理解,求高手详细解答,谢谢!!            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            Response.ClearContent();
            Response.ContentType = "image/Gif";
            Response.BinaryWrite(ms.ToArray());

解决方案 »

  1.   

    http://zhidao.baidu.com/question/126085667
      

  2.   

    System.IO.MemoryStream ms = new System.IO.MemoryStream();//内存流对象
      image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);//把图片数据存入该内存流对象中  Response.ClearContent();//清空Response对象内容,至于为什么要清空它?因为你本身是向客户端输出图片数据的,图片数据必须很纯,不能掺杂其它无关的数据,你抽空去查一下Response对象是什么,它都有哪些属性,这些属性是什么值这样,比如Response.Cookies是一个属性集合;其二,你在输出前,可能会配置输出缓存机制,如context.Response.Cache.SetCacheability(HttpCacheability.Public);,清空它们,不至于造成错误,asp.net自身有缓存机制的Response.ContentType = "image/Gif";
      Response.BinaryWrite(ms.ToArray());//输出,至于你问为什么要生成内存流对象,这里就是解释了,因为Response.BinaryWrite方法需要这么一种数据类型的参数,所以才要求你要生成那个内存对象//这里我给出另一种输出方式
    image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);//这里不用先把图片存入内存对象中,再把内存对象输出,我这里是直接把图片数据存入Response对象的OutputStream输出流(至于它底层怎么实现,我不去关心它了,楼主有兴趣自己去查看一下)
      

  3.   

    其实我也是理解模糊,Response对象提供相应的信息供应给客户端,比如它的响应流,头部流这些,毕竟最终我们是要把服务器端的内容通过网线传到远方的客户电脑上的。
    而流这个概念,你得去查下书或官方说明才行,好比Response.OutputStream,它作为一个输入流属性,它用于保存准备向远方的客户端输送的内容,比如把要输送的内容用二进制输出,那么,这些数据如果原先是另一种数据类型,比如开始的原始数据是十进制的或十六进制这些,那么我们得先把原妈内容转换了数据格式,保存到这个输出流属性中,以备后续输出。
    具体怎么传送数据的,你得自己去看下网络工程方面的书才得,毕竟HTTP,TCP/IP这些专业术语要完全理解,不是简单的事。
    官方称它为流,说明它与现实生活中的一些参照物为依据,流,让人想到的是流水,而数据通过网线传输,不正像自来水通过水管?当然,我只是说笑了,具体还得看书去理解。
    毕竟真正的数据是怎样从网络的一端传输给远方的另一端的,这其中知识不少啊,好比一部400M大小数据的电影,不可能一次性从服务器传给远方IE,就好比一池水,不可能一下子从水管出来,流动中的传输