011天(.net学习之路

来源:互联网 发布:剑三花姐脸型数据下载 编辑:程序博客网 时间:2024/05/01 20:49

流涉及三个基本操作:

1、可以读取流。读取是从流到数据结构(如字节数组)的数据传输。
2、可以写入流。写入是从数据结构到流的数据传输。
3、流可以支持查找。查找是对流内的当前位置进行的查询和修改。查找功能取决于流具有的后备存储区类型。例如,网络流没有当前位置的统一概念,因此一般不支持查找。

 System.IO的主要类:

Stream:
支持读取和写入字节的抽象类。不管它具体是什么形式,本质上总是可以视为一串字节序列。

File, FileInfo, Directory, DirectoryInfo
提供抽象的FileSystemInfo类的具体实现,虚拟了文件系统。

FileStreamMemoryStreamNetworkStream
流的具体类。其中MemoryStream是一个非缓存的数据流,它封闭的数据在内存中可以直接访问,作为一临时缓存,它很有用。

BufferedStream
给像NetworkStream这样的数据流添加了缓存的数据流。

TextReader, TextWriter, StringReader, StringWriterStreamReaderStreamWriter
向数据流中读出或写入编码后的文本。其中StringReaderStringWriter把一段String视为流的源。

BinaryReader,BinaryWriter
向数据流中读取和写入编码后的字符串或各种原始数据类型。

练习1:用流读取某个文件,并把它输出到控制台
用到的知识点:
1、文件流FileStream
2、文件流的Read()方法
3、编码的转换Encoding.UTF8.GetString()( 把字节流转换为UTF-8编码的字符串)
 1  static void Main(string[] args) 2         { 3             //文件流 4             FileStream fs = new FileStream("d:\\3.txt", FileMode.Open); 5             int bufferSize = 50; 6             //字节数组 7             byte[] buffer = new byte[bufferSize]; 8             int n; 9             //n标示读取多少字节10             while ((n = fs.Read(buffer, 0, bufferSize)) > 0)11             {12                 //为什么要(buffer, 0, n)而不是(buffer)?13                 //因为文件读取到最后,不一定需要读的字节数刚好就是bufferSize,输出的时候会残留上一次读的内容。14                 //Encoding.UTF8.GetString(表示字符编码.UTF-8.得到字符串())15                 Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, n));16             }17             //关文件流,文件流必须关闭。也可以使用 using(文件流实例的创建){实现的给中方法}来管理18             //使用using可以方便的释放资源(自动调用Dispose方法)19             fs.Close();20             Console.ReadKey();21 22         }23     }

 

练习2:用流来复制文件 (在读写时改变流可以加密哦,但自己也要知道怎么解密啊)

 1  static void Main(string[] args) 2         { 3             //用流来复制文件(复制一个3.txt的备份名称为3-复件.txt) 4             CopyFile("d:\\3.txt", "d:\\3-复件.txt"); 5         } 6         //写一个方法,给出一个原文件的路径和目标路径,进行复制操作 7         static void CopyFile(string inName, string toName) 8         { 9             //创建一个读的文件流,把原文件读到流中10             using (FileStream inStream = File.OpenRead(inName))11             {12                 //创建一个写的文件流,把流写进目标文件中13                 using (FileStream toStream = File.OpenWrite(toName))14                 {15                     CopyStream(inStream, toStream, 1000);16                 }17             }18         }19         //创建一个拷贝流的方法,把源流(inStream)的数据安指定缓冲的大小,拷贝到目标流(toStream)中20         static void CopyStream(Stream inStream, Stream toStream,int bufferSize)21         {22             byte[] buffer = new byte[bufferSize];23             int n;24             while((n=inStream.Read(buffer,0,bufferSize))>0)25             {26                 //向toStream流中写入字节系列27                 toStream.Write(buffer, 0, n);28                 //获取inStream流位置,让toStream流的位置和它保持一致29                 toStream.Position = inStream.Position;30             }31         }32     }

 


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击