字节流读应对应字节流写

   要求:从网页上读取数据,然后写入本地文件。  

   这段代码是通过一个url地址读取网页中的文本数据。没有写入文件,直接返回文本字符串。

public   static  String getPageContent(String url)
        
{
            String content 
= "";
            HttpWebRequest request 
= (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response 
= (HttpWebResponse)request.GetResponse();
            Stream stream 
= response.GetResponseStream();
            StreamReader sr 
= new StreamReader(stream);

            content 
= sr.ReadToEnd();

            sr.Close();
            response.Close();

            
return content;
        }

   确实能够读取网页。

  但我想读取一幅图像,也通过这种方式读取数据,结果调试了半天,一直不得行。后来发现是StreamReader 的问题。通过StreamReader 是以特定的编码读取字符,而我写文件是以字节流的方式写的。那这样,我的操作过程就是,先以字符方式读取,字符转化成字节,然后以字符流方式写。过程繁多,而且字符/字节间的转化涉及编码问题,几乎就是错误的做法。

  应该以字节流(BinaryReader)读,以字节流写。如下:

/**
         * 根据一个url地址下载web资源
         
*/

        
public   static   void  downloadWebResource(String url, String filename)
        
{
            HttpWebRequest request 
= (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response 
= (HttpWebResponse)request.GetResponse();
            Stream readStream 
= response.GetResponseStream();
            BinaryReader streamReader 
= new BinaryReader(readStream);

            FileInfo file 
= new FileInfo(filename);
            FileStream saveStream 
= file.Create();

            
while(true)
            
{
                
int bufferLen=1024;
                
byte[] buffer = new byte[bufferLen];
                
int rdLen = streamReader.Read(buffer, 0, bufferLen);
                saveStream.Write(buffer, 
0, rdLen);
                saveStream.Flush();
                
if (rdLen == 0 )
                    
break;
            }

            saveStream.Close();
            streamReader.Close();
            response.Close();
        }

ok,顺利通过测试。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值