zoukankan      html  css  js  c++  java
  • .net 流(Stream) StreamWriter和StreamReader、BinaryReader和BinaryWriter

    一、StreamWriter和StreamReader

    从上一篇博文可知文件流、内存流和网络流操作的都是字节,每次都要进行字节序列的转换,所以使用上比较麻烦。StreamWriter和StreamReader在对Stream底层进行了封装,可以直接操作字符数据。

    StreamWriter类主要完成一种特定的编码从流中读取字符的功能,它的构造函数和常用方法如下:

    • StreamWriter(Stream stream),构造函数,StreamWriter不仅能对FileStream对象,而且能够对NetWorkStream、MemoryStream等继承了Stream类的流对象进行封装;
    • StreamWriter(string path),构造函数,如需要处理的是文件流,则可直接利用文件路径创建以UTF8编码的StreamWriter对象;
    • Write(string value),方法,向数据流写入数据;
    • WriteLine(string value),方法,向数据流写入数据,并追加一个换行符(Unix)或回车换行符(Windows);
    • Close(),方法,关闭流,释放资源;

    StreamReader类主要以特定的编码向流中写入字符,它的构造函数和常用方法如下:

    • StreamReader(Stream stream),构造函数,利用流对象创建StreamReader对象;
    • StreamReader(string path),构造函数,如需要处理的是文件流,则可直接利用文件路径创建以UTF8编码的StreamReader对象;
    • string ReadLine(),方法,读取数据直到遇到换行符(Unix)或回车换行符(Windows);
    • string ReadToEnd(),方法,读取到文件尾的全部数据
    • int Peek(),方法,返回数据中下一个可用字符的编码值,如到达文件末尾则返回-1;
    • Close(),方法,关闭流,释放资源;

    StreamWriter和StreamReader实例

    try
    {
        //写入
        StreamWriter sw = new StreamWriter(@"d:\abc.txt");
        sw.WriteLine("我爱我家");
        sw.Close();
    
        //读取
        StreamReader sr = new StreamReader(@"d:\abc.txt");
        Console.WriteLine(sr.ReadToEnd());
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

    二、BinaryReader和BinaryWriter

    为了操作图像、压缩文件等二进制流文件,System.IO还提供了BinaryReader类和BinaryWriter类,用于二进制模式的读写流。
    BinaryReader的每个读方法都有一个对应的写方法,比如针对不同的数据结构,BinaryReader类提供了ReadByte、ReadBoolean、ReadInt、ReadInt16、ReadString等,与之对应的BinaryReader类则提供了多个重载的Write方法,分别对应上面的读方法,所以使用起来非常方便。例如,当Write方法传递的参数是Int32类型时,利用BinaryWriter的Write方法可用将Int32类型数据转化为长度为4的字节数组,并将字节流传递给一个Stream对象。

    BinaryReader和BinaryWriter实例

    byte[] sendData;
    using (MemoryStream mem = new MemoryStream()) {
        BinaryWriter writer = new BinaryWriter(mem, Encoding.UTF8); 
        
        writer.Write(SocketTools.strConvertToHexByte(SocketTools.md5(packageHead.CarIdentifier, 32)));
        writer.Write(packageHead.ProjectIdentifier);
        writer.Write(packageHead.ModelIdentifier);
        writer.Write(packageHead.ProtocolVersion);
        writer.Write(SocketTools.reverseShort(packageHead.RequestSerial));
        writer.Write(SocketTools.reverseInt32(packageHead.PacketTimestamp));
        writer.Write(SocketTools.reverseShort(packageHead.FunctionNo));
        writer.Write(SocketTools.reverseShort(packageHead.DataLength));
        
        writer.Write(msg.ToCharArray());
        sendData = mem.ToArray();
        writer.Close();
    }
    出处:http://www.zhaiqianfeng.com    
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    《JS权威指南学习总结--6.6属性getter和setter》
    《JS权威指南学习总结--6.5枚举属性》
    django的模板系统
    django额外参数的传递和url命名
    python在图片上画矩形
    当爬虫遇到js加密
    php基础-7
    php基础-6
    php基础-5
    php基础-4
  • 原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4617735.html
Copyright © 2011-2022 走看看