011天(.net学习之路
来源:互联网 发布:剑三花姐脸型数据下载 编辑:程序博客网 时间:2024/05/01 20:49
流涉及三个基本操作:
1、可以读取流。读取是从流到数据结构(如字节数组)的数据传输。
2、可以写入流。写入是从数据结构到流的数据传输。
3、流可以支持查找。查找是对流内的当前位置进行的查询和修改。查找功能取决于流具有的后备存储区类型。例如,网络流没有当前位置的统一概念,因此一般不支持查找。
System.IO的主要类:
Stream:
支持读取和写入字节的抽象类。不管它具体是什么形式,本质上总是可以视为一串字节序列。
File, FileInfo, Directory, DirectoryInfo:
提供抽象的FileSystemInfo类的具体实现,虚拟了文件系统。
FileStream,MemoryStream,NetworkStream:
流的具体类。其中MemoryStream是一个非缓存的数据流,它封闭的数据在内存中可以直接访问,作为一临时缓存,它很有用。
BufferedStream:
给像NetworkStream这样的数据流添加了缓存的数据流。
TextReader, TextWriter, StringReader, StringWriter,StreamReader,StreamWriter:
向数据流中读出或写入编码后的文本。其中StringReader和StringWriter把一段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>
- 011天(.net学习之路
- .NET学习之路
- .net学习之路
- .NET学习之路。
- 013天(.net学习之路
- 012天(.net学习之路
- 014天(.net学习之路
- 017天(.net学习之路
- 学习ASP.NET之路
- .net 学习之路 一
- C#.NET学习之路
- .net 学习之路(转)
- 学习ASP.NET之路
- .net新手之学习之路一
- asp.net 学习之路之DataSet
- Visual Studio .NET学习之路
- Visual Studio .NET 学习之路
- ASP.NET程序员学习之路
- struts2.2.3 配置中文乱码拦截过滤器 解决接收中文参数乱码问题
- jQuery选择器学习理解
- 探索并发编程(四)------Java并发工具
- Dalvik虚拟机探析
- ubuntu下搭建lamp
- 011天(.net学习之路
- 设计与开发应用服务器(一)------常见模式
- 强势回归 Qt让跨平台快速迈向移动化
- string\const char*\char*转换
- 解决TCP网络传输“粘包”问题
- 探索并发编程(五)------Java多线程开发技巧
- 探索并发编程(六)------Java多线程性能优化
- 黑马程序员java学习—Map集合
- 探索并发编程(七)------分布式环境中并发问题