A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wxfyzt 于 2014-2-10 21:19 编辑

在读取文件时,文件流对象、文件读取器对象在内存中如何运作的?

5 个回复

倒序浏览
这个问题好深奥,我来消灭0回复好了。。。(其实我能说出来的很有限,等大牛来更正或补充吧)

文件读取器应该是编译器,乃至系统本身定义的。

文件流则根据你调用的方法,无外乎stream啊,byte一类吧。

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 潘金锋 于 2014-2-10 20:08 编辑

文件一般指存储在硬盘上的字节块。文件可以通过流的形式被读取到内存,或者将内存中的数据以流的形式写入到硬盘文件。

文件流(FileStream)类型实现文件随机访问,并以字节流来表示数据。为基于文件的流提供了抽象Stream成员的实现。这是一个相当原始的流,它只能读取或写入一个字节或者字节数组。其实,我们通常不需要直接和FileStream类型的成员交互,而是使用各种Stream包装类。




.NET流架构主要有三个概念:
  • backing stores
  • decorators
  • adapters

Backing stores是真正实现输入输出的底层,比如文件或者网络连接。它有以下一种或两种功能:


  • 可以以字节形式顺序读取的源
  • 可以以字节形式顺序写入的目的


Stream类体现了该目的。

Stream类可以分为两类:

        Backing store streams

        如FileStream、NetworkStream

        Decorator streams(装饰)

        这些流实现了流数据的特定形式的转换,比如缓冲、压缩、加密等。

        如DeflateStream、CryptoStream


Backing store和decorator streams都只处理字节,但程序常常在更高级别运行,比如文本或者XML。

Adapters(适配)通过将流包裹在类中实现了文本或其他格式与字节的连接。


Adapter包裹了一个流,这一点类似于decorator。但与decorator不同的是,adapter本身不是流,它只是彻底地对用户屏蔽了操作字节的方法。


FileStream 类型实现文件随机访问,并以字节流来表示数据。为基于文件的流提供了抽象Stream成员的实现。这是一个相当原始的流,它只能读取或写入一个字节或者字节数组。其实,我们通常不需要直接和FileStream类型的成员交互,而是使用各种Stream包装类。


Stream Adapters 流适配

流仅仅处理字节;而读写诸如字符串,整数或XML元素等数据类型,则需要使用适配器。.NET Framework提供了:


  • Text adapters (针对字符串和字符数据)
  • Binary adapters (针对诸如int, bool, string, float原始类型)
  • XML adapters




System.IO.TextWriter和System.IO.TextReader。这两个是抽象类。

System.IO.StreamWriter和System.IO.StreamReader。这两个类分别继承自TextWriter和TextReader。用来向(从)文件中存储(获取)文本信息。不支持随机文件访问。当需要读写基于字符的数据(比如字符串)的时候,StreamReader和StreamWriter类就非常有用。

System.IO.StringWriter和System.IO.StringReader。这两个类分别继承自TextWriter和TextReader。它们分别用于向字符串写入字符或字符串以及从字符串读取字符或字符串。使用StringWriter和StringReader类型,我们可以将文本信息当做内存中的字符一样来处理。

System.IO.BinaryWriter和System.IO.BinaryReader。这两个类用于读写数据流中类型为.NET基本类型的数据。


回复 使用道具 举报 1 0
不错   感谢分享
回复 使用道具 举报
感谢分享  学习的东西还有很多
回复 使用道具 举报
过来学习的,;谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马