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


    https://blog.csdn.net/ymnl_gsh/article/details/80723050

    C#的FileStream类提供了最原始的字节级上的文件读写功能,但我们习惯于对字符串操作,于是StreamWriter和 StreamReader类增强了FileStream,它让我们在字符串级别上操作文件,但有的时候我们还是需要在字节级上操作文件,却又不是一个字节 一个字节的操作,通常是2个、4个或8个字节这样操作,这便有了BinaryWriter和BinaryReader类,它们可以将一个字符或数字按指定 个数字节写入,也可以一次读取指定个数字节转为字符或数字。


    StreamWriter sr=new StreamWriter(@"xxxx.txt");  ->文本读写

    FileStream fs=File.Open(@"xxx.dat",FileMode.Open);
    BinaryWriter bw=new BinaryWriter(fs););               ->二进制读写

    注意,从FileInfo.OpenWrite()返回的FileStream对象被传到BinaryWriter类型的构造函数中。使用这项技术就能很方便地在写入数据前引入一个流。需要理解的是,BinaryWriter构造函数能接受任何派生自Stream类型的参数(比如FileStream、MemoryStream或BufferedStream)。

    文本读写器(StreamWriter/Reader)和二进制读写器(Binary Writer/Reader)的关系:

    首先两者都是基于流来操作文件进行读写的,但后者是以二进制的方式来进行的,后者写入文件后双击打开会是乱码(该文件后缀为.dat),读写都具体的数据类型来操作流的位置,进行读取的时候要通过具体数据类型读取,例如br.ReadInt32()...;
    文本读写器中写入具体文件中的是字符串的文本格式,双击打开该文件是可以阅读的,同时在运用StreamReader对象进行读取时,就不能以具体类型大小来操作流的位置了,而是以字符大小为单位操作流的位置的,读出来的也是一个字符串,而不是具体类型。

     namespace ch16
    {
        class Program
        {

            static void txtOperate()  //文本输入输出
            {
                string t = @"F: est t.txt";
                try
                {
                    using (StreamWriter sw1 = new StreamWriter(t))
                    {
                        sw1.WriteLine("123"); sw1.WriteLine("456");
                        Console.WriteLine("写入成功!");
                    }
                    using (StreamReader sr=new StreamReader(t))
                    {
                        Console.WriteLine("文本内容为:");
                        string line;
                        while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); }
                    }
                }
                catch (Exception e) { Console.WriteLine(e.Message); }
            }
            static void binaryRW(string fileName)//二进制文件输入输出
            {
                using (BinaryWriter bw = new BinaryWriter(File.Open(fileName, FileMode.Create)))
                {
                    bw.Write(10);
                    bw.Write("hello binary!");
                    bw.Write(true);
                }
                using (BinaryReader br = new BinaryReader(File.Open(fileName, FileMode.Open)))
                {
                    int i1 = br.ReadInt32();
                    string s = br.ReadString();
                    bool b = br.ReadBoolean();
                    Console.WriteLine("{0},{1},{2}", i1, s, b);

                }
            }
            static void Main(string[] args)
            {
                binaryRW(@"d:abc.dat");
                Console.Read();
            }
        }
    }

  • 相关阅读:
    简单的总结
    /bin/bash: sshpass: command not found
    ubuntu 16.04 忘记root密码
    ubuntu下QtCreator启动无响应问题解决
    TX1 文字界面启动与root用户自动登录设置
    qt线程睡眠
    TX2 默认root用户启动
    linux下使用文件IO监听GPIO中断
    Linux下指定线程的名字
    [Error] ISO C++ forbids comparison between pointer and integer
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/10622057.html
Copyright © 2020-2023  润新知