使用 .NET的IO(2)

原创 2002年04月18日 09:25:00

向字符串写入字符<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


下面的代码示例把从字符数组中指定位置开始的一定数目的字符写入现有的字符串。使用 StringWriter 完成此操作,如下所示。


此示例阐释了使用 StringBuilder 来修改现有的字符串。请注意,这需要一个附加的 using 声明,因为 StringBuilder 类是 System.Text 命名空间的成员。另外,这是一个直接创建字符数组并对其进行初始化的示例,而不是定义字符串然后将字符串转换为字符数组。


此代码产生以下输出:


构成流


后备存储器是一个存储媒介,例如磁盘或内存。每个不同的后备存储器都实现其自己的流作为 Stream 类的实现。每个流类型也都从其给定的后备存储器读取字节并向其给定的后备存储器写入字节。连接到后备存储器的流叫做基流。基流具有的构造函数具有将流连接到后备存储器所需的参数。例如,FileStream 具有指定路径参数(指定进程如何共享文件的参数)等的构造函数。


System.IO 类的设计提供简化的流构成。可以将基流附加到一个或多个提供所需功能的传递流。读取器或编写器可以附加到链的末端,这样便可以方便地读取或写入所需的类型。


下面的代码示例在现有 MyFile.txt 的周围创建 FileStream 对象,以缓冲 MyFile.txt。(请注意,默认情况下缓冲 FileStreams。)然后,创建 StreamReader 以读取 FileStream 中的字符,FileStream 被作为 StreamReader 的构造函数参数传递到 StreamReader。ReadLine 进行读取,直到 Peek 发现不再有字符为止。


下面的代码示例在现有 MyFile.txt 的周围创建 FileStream 对象,以缓冲 MyFile.txt。(请注意,默认情况下缓冲 FileStreams。)然后,创建 BinaryReader 以读取 FileStream 中的字节,FileStream 被作为 BinaryReader 的构造函数参数传递到 BinaryReader。ReadByte 进行读取,直到 PeekChar 发现不再有字节为止。


创建编写器


下面的代码示例创建了一个编写器,编写器是一个可以获取某些类型的数据并将其转换成可传递到流的字节数组的类。


在本示例中,您创建了一个具有构造函数的类,该构造函数带有流参数。从这里,您可以公开任何需要的 Write 方法。您必须将编写的所有内容都转换为 byte[]。在您获得 byte[] 之后,Write 方法将其写入流。


异步文件 I/O


同步 I/O 意味着在 I/O 操作完成之前,方法被阻塞,I/O 操作完成后,方法返回其数据。使用异步 I/O,用户可以调用 BeginRead 或 BeginWrite。主线程可以继续进行其他工作,稍后,用户将能够处理数据。另外,多个 I/O 请求可以被同时挂起。


要在此数据可用时得到通知,您可以调用 EndRead 或 EndWrite,传入与您发出的 I/O 请求对应的 IAsyncResult。您还可以提供回调方法,该回调方法应调用 EndReadEndWrite 以计算出读取或写入了多少字节。当许多 I/O 请求被同时挂起时,异步 I/O 可以提供较好的性能,但通常要求对您的应用程序进行一些重要的调整以使其正常工作。


Stream 类支持在同一个流上混合使用同步和异步读取及写入,而不管操作系统是否允许。Stream 根据其同步实现提供默认的异步读取和写入操作的实现,而根据其异步实现提供默认的同步读取和写入操作的实现。


当实现 Stream 的派生类时,必须为同步或异步 Read 和 Write 方法之一提供实现。虽然允许重写 ReadWrite,并且异步方法(BeginReadEndReadBeginWrite EndWrite)的默认实现将和同步方法的实现一起工作,但这不能提供最有效的性能。与之相似,如果您提供了一个异步方法的实现,同步 ReadWrite 方法也将正常工作,但是,如果您专门实现同步方法,性能通常会更好。ReadByte 和 WriteByte 的默认实现调用带有一个元素字节数组的同步 ReadWrite 方法。当从 Stream 派生类时,如果有内部字节缓冲区,强烈建议重写这些方法以访问内部缓冲区,这样性能将得到显著提高。


连接到后备存储器的流重写同步或异步 ReadWrite 方法之一,以获取默认情况下另一种方法的功能。如果流不支持异步或同步操作,实施者只需让适当的方法引发异常即可。


下面的示例是一个假设的批量图像处理器的异步实现,其后是同步实现的示例。本代码用于在目录中的每个文件上执行耗费 CPU 资源的操作。有关更多信息,请参阅 .NET 框架开发人员规范中的“.NET 异步编程模型”主题。


以下是同一假设的同步示例。

C# .Net读写文件 IO流 C# .Net对文件&文件夹操作

通常来讲,用C#程序读取一个文件需要以下5个基本步骤 1:创建文件流 2:创建阅读器或者写入器 3:执行读写操作 4:关闭阅读器或者写入器 5:关闭文件流 (注意事项: 使用文件流需要导入...
  • miniduhua
  • miniduhua
  • 2016年10月21日 15:16
  • 2948

Pro ASP.NET Core MVC(二)【第一个MVC 应用程序】

学习一个软件开发框架的最好方法是跳进他的内部并使用它。在本章,你将用ASP.NET Core MVC创建一个简单的数据登录应用。我将它一步一步地展示,以便你能看清楚怎样构建一个MVC 应用程序。为了让...
  • WuLex
  • WuLex
  • 2017年05月20日 16:45
  • 1051

Python下异步IO和协程简介

1、协程(coroutine) 协程(coroutine)也是一种程序组件。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程不是进程或线程,其执行过程更类似于子例程,或者说不...
  • GVFDBDF
  • GVFDBDF
  • 2015年10月19日 19:48
  • 2553

Java中的IO技术使用总结

请尊重他人劳动成果,请勿随意剽窃,转载请注明,谢谢!转载请注明出处:http://blog.csdn.net/evan_man/article/details/51812678          ...
  • evan_man
  • evan_man
  • 2016年07月21日 15:21
  • 2207

wince6下操作IO口

作者:BB高擎天的空间 转自:http://hi.baidu.com/cahbb/item/e97b76e9f470a50b65db00d1 使用6410的开发板,从示例为基础,使用其它口IO...
  • whw8007
  • whw8007
  • 2014年01月13日 08:36
  • 705

IO流的基本使用

IO流 |--字节流 |--字节输入流 InputStream int read():一次读取一个字节 ...
  • Demome
  • Demome
  • 2016年06月30日 16:37
  • 1231

Java文件读写IO/NIO及性能比较总结

http://blog.csdn.net/chenleixing/article/details/44207469 干Java这么久,一直在做WEB相关的项目,一些基础类差不多都已经...
  • u013488847
  • u013488847
  • 2016年12月22日 21:22
  • 634

C#使用异步实现 IO 操作

使用异步特性实现 IO 操作的意义异步特性有利于增强应用程序的响应能力。因为一个操作的 UI 线程可以执行其他工作。如果 UI 线程需要执行较长时间的代码(如,> 50ms),UI 会阻塞到 I/O ...
  • crazycoldking2015
  • crazycoldking2015
  • 2016年12月07日 00:03
  • 1245

内核态下实现direct IO

如何在内核态下实现文件的无缓存读写,以及”do_mmap_pgoff undefined“的解决方法。...
  • u010059563
  • u010059563
  • 2014年12月01日 22:38
  • 1166

NIO与IO在Net中的区别

感性认识: 传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。使用NIO,不再需要为每个线程创建单独的线程,...
  • zlfing
  • zlfing
  • 2015年01月06日 20:43
  • 962
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 .NET的IO(2)
举报原因:
原因补充:

(最多只允许输入30个字)