黑马程序员技术交流社区

标题: 关于StreamReader 这个类的问题 [打印本页]

作者: z4226797    时间: 2012-4-20 15:01
标题: 关于StreamReader 这个类的问题
     问下这个类是什么意思,还有怎么用的
在视频中并没有看到关于这个类的讲解,后面却出现用这个类来做的例子,有点看不懂了
作者: 过客    时间: 2012-4-20 15:34
StreamReader 旨在以一种特定的编码输入字符,StreamReader 的默认编码为 UTF-8,而不是当前系统的 ANSI 代码页。UTF-8 可以正确处理 Unicode 字符并在操作系统的本地化版本上提供一致的结果。
主要用于读取文件:
using (StreamReader sr = new StreamReader("test.txt"))
            {
                String line=null;
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }

作者: 刘真    时间: 2012-4-20 18:53
在读写文件的过程中,Filestream只可以进行以字节为单位原始数据流进行读写操作,为此,C#中提供了功能更加强大的StreamReader/ StreamWriter来支持文件的读写. StreamReader/ StreamWriter可以进行以字符为单位的数据读写操作。
StreamReader有很多的构造函数:在这里只列出两个常用和比较常见的

StreamReader  sr=new StreamReader (Stream); Stream可以是Filestream;

StreamReader  sr=new StreamReader (String); String为指定的文件名初始化 StreamReader 类的新实例。

例如:

//demo1

FileStream filest = new FileStream(@"c:\abc.txt", FileMode.Open, FileAccess.ReadWrite); StreamReader sr = new StreamReader(filest);

//demo2

StreamReader another = new StreamReader(@"c:\abc.txt");

两个StreamReader都指向同一个文件.

StreamReader读取文件中的数据的代码:

FileStream filest = new FileStream(@"c:\abc.txt", FileMode.Open, FileAccess.ReadWrite);

StreamReader sr = new StreamReader(filest);

string strLine = sr.ReadLine();//读取文件中的一行

while(strLine!=null)//判断是否为空,表示到文件最后一行了

{

Console.WriteLine(strLine);

strLine = sr.ReadLine();

}

sr.Close();//关闭流

filest.Close();



作者: 忘忧草    时间: 2012-4-20 19:40
本帖最后由 忘忧草 于 2012-4-20 19:43 编辑
刘真 发表于 2012-4-20 18:53
在读写文件的过程中,Filestream只可以进行以字节为单位原始数据流进行读写操作,为此,C#中提供了功能更加强 ...

既然demo1和demo2效果是一样的,为什么demo2要加一个FileStream中转呢?

我的理解是不是FileStream更注重数据流的存储功能,而StreamReader更注重数据流的读写功能?
作者: 刘真    时间: 2012-4-20 22:52
FileStream对象表示在磁盘上或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法。
但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是
字节和字节数组,而Stream类操作的是字符数据
。如果是准备读取Byte数据最好用FileStream,
因为使用StreamReader读取的话,可能存在数据丢失的情况。字符数据容易操作,所以一般使用StreamReader
来读取数据。FileStream既可以从文件中读取数据也可以向文件中写数据,但是StreamReader只能读取数据,
向文件中写可以用StreamWriter。
FileStream是字节流或字节数组的读写,而StreamReader只是读取文件中的字符数据,不能用于向文件中写。color]
作者: 李宗鹏    时间: 2012-4-21 00:36
你最好装一个MSDN
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
下表列出了由 StreamReader 类型公开的成员。
公共构造函数
  名称  说明  
   StreamReader  已重载。为指定的流初始化 StreamReader 类的新实例。
页首
公共字段
  名称  说明  
    Null  空流周围的 StreamReader。
页首
公共属性
  名称  说明  
   BaseStream  返回基础流。
   CurrentEncoding  获取当前 StreamReader 对象正在使用的当前字符编码。
   EndOfStream  获取一个值,该值表示当前的流位置是否在流的末尾。
页首
公共方法 (请参见 受保护的方法 )
  名称  说明  
   Close  已重写。 关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源。  
  CreateObjRef   创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (从 MarshalByRefObject 继承。)
   DiscardBufferedData  允许 StreamReader 对象丢弃其当前数据。  
   Dispose  已重载。  
   Equals   已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。)
   GetHashCode   用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。)
  GetLifetimeService   检索控制此实例的生存期策略的当前生存期服务对象。 (从 MarshalByRefObject 继承。)
   GetType   获取当前实例的 Type。 (从 Object 继承。)
  InitializeLifetimeService   获取控制此实例的生存期策略的生存期服务对象。 (从 MarshalByRefObject 继承。)
   Peek  已重写。 返回下一个可用的字符,但不使用它。  
   Read  已重载。 已重写。 读取输入流中的下一个字符或下一组字符。  
   ReadBlock   从当前流中读取最大 count 的字符并从 index 开始将该数据写入 buffer。 (从 TextReader 继承。)
   ReadLine  已重写。 从当前流中读取一行字符并将数据作为字符串返回。  
   ReadToEnd  已重写。 从流的当前位置到末尾读取流。  
    ReferenceEquals   确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。)
    Synchronized   在指定 TextReader 周围创建线程安全包装。 (从 TextReader 继承。)
   ToString   返回表示当前 Object 的 String。 (从 Object 继承。)
页首
受保护的方法
  名称  说明  
   Dispose  已重载。 已重写。  
   Finalize   允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
   MemberwiseClone   已重载。 (从 MarshalByRefObject 继承。)
作者: ︻◣㊣袏邊愛☆    时间: 2012-4-24 18:39
学习了谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2