C#中流的读写器BinaryReader、BinaryWriter,StreamReader、StreamWriter详解

时间:2022-09-04 19:14:57
 问题一:为什么要出现与文件流配套的读写器类型呢?
                   主要是因为文件流对象在读写字节的效率是相当高的,但是在处理其他类型的数据时会比较麻烦,
                   所以就出现了二进制读写器和文本读写器来解决这一问题。

  -----------YYC


            FileStream fsl = File.Open("E:\\a.txt",FileMode.Open,FileAccess.ReadWrite);
            BinaryWriter,BinaryReader都是以二进制的方式来操作流的,所以都是基于(Stream Output,Stream Input)流的对象来创建读写器对象
            其中流的移动是一字节为单位的
            BinaryWriter bw = new BinaryWriter(fsl);
            bw.Write(101);
            bw.Write(3.14);
            bw.Write("aaa");
            bw.Flush();//清空系统缓存区,使缓存区的数据全部写入物理文件中
            bw.Write(new char[] {'A','B','C','D'});
            bw.Write(DateTime.Now.ToString());
            bw.Close();
            fsl.Close();
            fsl = File.Open("E:\\a.txt",FileMode.Open,FileAccess.ReadWrite);
            BinaryReader br = new BinaryReader(fsl);
            int a = br.ReadInt32();
            double b = br.ReadDouble();
            /*注意此处a,b读取的顺序不能乱
             *否则会出现乱码
             */
            br.Close();
            fsl.Close();

            MessageBox.Show(a.ToString()+"    "+b.ToString());

 文本读写器StreamReader、StreamWriter是以文本流方式来对流进行读写操作
  所以也需要利用流对象来创建读写器对象*/
            FileStream fsl = File.Open("E:\\a.txt",FileMode.Open,FileAccess.ReadWrite);
            StreamWriter sw = new StreamWriter(fsl);
            sw.Write(22);
            sw.Write(1.111);
            sw.Write("qqq");
            sw.WriteLine("aaaa");
            sw.Close();
            fsl.Close();
            fsl = File.Open("E:\\a.txt", FileMode.Open, FileAccess.ReadWrite);
            StreamReader sr = new StreamReader(fsl);
            string a = sr.ReadToEnd();
            MessageBox.Show(a);

文本读写器和二进制读写器的关系
首先两者都是基于流来操作文件进行读写的,但前者是以二进制的方式来进行的,前者写入文件后双击打开会是乱码,读写都要更具
具体的数据类型来操作流的位置。后者则是以文本方式来操作文件的读写的,文本读写器中写入时更具具体数据类型来操作流的位置,
但写入具体文件中的却是字符串的文本格式,双击打开该文件是可以阅读的,同时在运用StreamReader对象进行读取时,就不能以具体类型大小来
 操作流的位置了,而是以字符大小为单位操作流的位置的,读出来的也是一个字符串,而不是具体类型