当前位置:首页 > Windows程序 > 正文

C# 关于流的认识(借鉴)

2021-05-25 Windows程序

一  FileStream类

FileStream类主要用于读取磁盘上的文件或者向磁盘文件写入信息。有时,我们需要将程序中的一些数据存储到磁盘上或是读取配置文件中某些内容,在这里我们就会用该类。

从磁盘上的文件中读取内容:

FileStream读取文件:

1 1 FileStream file = File.Open(@"F:\file.txt", FileMode.Append);//初始化文件流2 2 byte[] array = Encoding.UTF8.GetBytes("Hello World!你好");//给字节数组赋值3 3 file.Write(array, 0, array.Length);//将字节数组写入文件流4 4 file.Close();//关闭流

二  MemoryStream类

MemoryStream类主要用于操作内存中的数据。比如说网络中传输数据时可以用流的形式,当我们收到这些流数据时就可以声明MemoryStream类来存储并且处理它们。

MemoryStream操作字符串:

1string str = "Hi!你好!";2byte[] array = Encoding.UTF8.GetBytes(str);//将字符串转化为字节数组3 MemoryStream memory = new MemoryStream(array);//初始化MemoryStream类4byte[] arrayNew = memory.ToArray();//将内存中的数据转换为字节数组5string strNew = Encoding.UTF8.GetString(arrayNew);//将字节数组转换为字符串

三  BufferedStream类

BufferedStream类主要也是用来处理流数据的,但是该类主要的功能是用来封装其他流类。为什么要封装其他流类,这么做的意义是什么?按照微软的话说主要是减少某些流直接操作存储设备的时间。对于一些流来说直接向磁盘中存储数据这种做法的效率并不高,用BufferedStream包装过的流,,先在内存中进行统一的处理再向磁盘中写入数据,也会提高写入的效率。

将磁盘上的一个文件写入到磁盘上的另一个文件中:

 1 1 FileStream file1 = File.Open(@"F:\file1.txt", FileMode.OpenOrCreate,FileAccess.Read);//读取文件流 2  2 FileStream file 2= File.Open(@"F:\file2.txt", FileMode.OpenOrCreate,FileAccess.Write);//写入文件流 3  3  4  4 byte[] array = new byte[4096]; 5  5        6  6 BufferedStream bufferedInput = new BufferedStream(file1);//封装文件流 7  7 BufferedStream bufferedOutput = new BufferedStream(file2);//封装文件流 8  8  9  9 bufferedInput.Read(array, 0, array.Length);10 10 bufferedOutput.Write(array, 0, array.Length);11 11 12 12 int bytesRead = 0;13 13 while ((bytesRead = bufferedInput.Read(array, 0, 4096)) > 0)//读取到了数据14 14   {15 15     bufferedOutput.Write(array, 0, bytesRead);16 16     Console.WriteLine(bytesRead);17 17    }18 18 bufferedInput.Close();//关闭各种流19 19 bufferedOutput.Close();20 20 file1.Close();21 21 file2.Close();

四 NetWorkStream类

NetWorkStream类是专门用来处理服务器与客户端通信的流。它在网络编程中经常使用,主要是用来处理类似Socket、TcpClient和TcpListener这些类中得到的流。

简单的TCP同步方式服务器与客户端通信:

 1 1 TcpListener lis=new TcpListener(5000); //服务器监听 2  2 lis.Start();//启动 3  3 Socket sock=lis.AcceptSocket();//阻塞,直到有客户端连接 4  4  5  5 NetworkStream networkStream = new NetworkStream(sock);//得到Socket中的流 6  6 if (netStream.DataAvailable)   //如果客户端发送了消息 7  7 { 8  8    byte[] data = new byte[1024];   //定义一个字节数组,用来存放接收的数据 9  9    int len = netStream.Read(data, 0, data.Length);  //从位置开始,读取到字节数组末尾10 10    string line = Encoding.Default.GetString(data, 0, len);  //把收到的字节转换为字符串11 11 }


五  StreamReader/StreamWriter类

     StreamReader/StreamWriter主要用来处理流数据。它们分别提供了高效的流读取/写入功能。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70924.html