• .net 流(Stream)


    转自:http://www.oseye.net/user/kevin/blog/86

    一、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();
    }
  • 相关阅读:
    Docker(二十一)-Docker Swarm集群部署
    Docker(十八)-Docker配置DNS
    Docker(十七)-修改Docker容器启动配置参数
    Docker(十六)-Docker的daemon.json的作用
    JavaScript实现无缝滚动 原理详细讲解
    JS 数字 、中文、 英文、判断
    JS常用属性方法大全
    vue.js插件使用(01) vue-resource
    Vue.js常见问题
    web前端开发必备技术
  • 原文地址:https://www.cnblogs.com/gavin-num1/p/5190365.html
Copyright © 2020-2023  润新知