字节流读应对应字节流写

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

   这段代码是通过一个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,顺利通过测试。 

你可能感兴趣的:(Web)