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

一  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操作字符串:

1 string str = "Hi!你好!";2 byte[] array = Encoding.UTF8.GetBytes(str);//将字符串转化为字节数组3 MemoryStream memory = new MemoryStream(array);//初始化MemoryStream类4 byte[] arrayNew = memory.ToArray();//将内存中的数据转换为字节数组5 string 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主要用来处理流数据。它们分别提供了高效的流读取/写入功能。

读取与写入:

 1 1 StreamReader reader = new StreamReader("filePath");//初始化读取 2  2 StreamWriter writer = new StreamWriter("filePath");//初始化写入 3  3  4  4 string readStr=reader.ReadLine();//从流中读取一行 5  5 string readAff = reader.ReadToEnd();//从流中读取全部 6  6  7  7 writer.Write("Hi 你好");//写入内容 8  8 writer.WriteLine("Hi 你好");//写入一行 9  9 10 10 reader.Close();//关闭流11 11 writer.Close();

六  TextReader/TextWriter类

TextReader/TextWriter类主要用来处理流数据。它们分别提供了高效的文本流读取/写入功能。

读取与写入:

 1  1 TextReader textReader = new StringReader("Hi 你好");//初始化读取流 2  2 TextWriter textWriter = new StringWriter();//初始化写入流 3  3  4  4 char[] c=new char[4096]; 5  5 int chars = 0; 6  6 while ((chars = textReader.Read(c, 0, 4096)) > 0)//把流中数据写入到字符数组中 7  7 { 8  8    textWriter.Write(c, 0, 4096);//从字符数组中读取流 9  9 }10 10 11 11 string str= textWriter.ToString();//将流中数据写到字符串中12 12 textReader.Close();//关闭流13 13 textWriter.Close();

注意事项:

1.流使用后必须要关闭。

2.把流中数据加载到内存时要考虑内存溢出等问题。

时间: 2024-08-10 17:08:50

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

瀑布流效果的一些收获

瀑布流效果已经流行了很久,之前在项目中做了一次,今天页面改版又做了一次瀑布流的效果,中间又有了一些收获,谨记于此. 这个瀑布流效果是借鉴的网上一位大神写的代码,然后正好在项目中得到了应用. 1 function waterFall(mr, mb) { //mr水平方向的间距,mb垂直方向的间距 2 var ocontainer = document.getElementById("container"); 3 if (ocontainer) { 4 var pageWidth = oc

流量调整和限流技术

在早期的计算机领域,限流技术(time limiting)被用作控制网络接口收发通信数据的速率. 可以用来优化性能,减少延迟和提高带宽等. 现在在互联网领域,也借鉴了这个概念, 用来为服务控制请求的速率, 如果双十一的限流, 12306的抢票等. 即使在细粒度的软件架构中,也有类似的概念. 两种常用算法 令牌桶(Token Bucket)和漏桶(leaky bucket)是 最常用的两种限流的算法. 漏桶算法 它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量.漏桶算法提供了一种机制,

一个Netfilter nf_conntrack流表查找的优化-为conntrack增加一个per cpu cache

独悲需要忍受,快乐需要分享对Linux协议栈多次perf的结果,我无法忍受conntrack的性能,然而它的功能是如此强大,以至于我无法对其割舍,我想自己实现一个快速流表,但是我不得不抛弃依赖于conntrack的诸多功能,比如state match,Linux NAT等,诚然,我虽然对NAT也是抱怨太多,但不管怎样,不是还有很多人在用它吗.       曾经,我针对conntrack查找做过一个基于离线统计的优化,其思路很简单,就使用动态的计算模式代替统一的hash算法.我事先会对经过该BOX

(转)RTP协议全解(H264码流和PS流)

写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析, 其中借鉴了很多文章,我都列在了文章最后,在此表示感谢. 互联网的发展离不开大家的无私奉献,我决定从我做起,希望大家支持. 原创不易,转载请附上链接,谢谢http://blog.csdn.net/chen495810242/article/details/39207305 1.RTP Header解析   图1 1)        V:RTP协议的版本号,占2位,当前协议版本号为2 2)        P:

HDU 4888 Redraw Beautiful Drawings(最大流+判最大流网络是否唯一)

Problem Description Alice and Bob are playing together. Alice is crazy about art and she has visited many museums around the world. She has a good memory and she can remember all drawings she has seen. Today Alice designs a game using these drawings

从Storm和Spark Streaming学习流式实时分布式计算系统的设计要点

0. 背景 最近我在做流式实时分布式计算系统的架构设计,而正好又要参见CSDN博文大赛的决赛.本来想就写Spark源码分析的文章吧.但是又想毕竟是决赛,要拿出一些自己的干货出来,仅仅是源码分析貌似分量不够.因此,我将最近一直在做的系统架构的思路整理出来,形成此文.为什么要参考Storm和Spark,因为没有参照效果可能不会太好,尤其是对于Storm和Spark由了解的同学来说,可能通过对比,更能体会到每个具体实现背后的意义. 本文对流式系统出现的背景,特点,数据HA,服务HA,节点间和计算逻辑间

PHP-XML基于流的解析器及其他常用解析器

PHP中有两种主要的XML解析器 1)基于树的解析器.它是把整个文档存储为树的数据结构中,即需要把整个文档都加载到内存中才能工作.所以,当处理大型XML文档时候,性能剧减.SimpleXML和DOM扩展属于此类型解析器. 2)基于流的解析器.它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互(当移向下一个节点时,上一个节点是被丢弃,但也设置为保留).很明显,其效率要高且占内存少,不便之处代码量大点. 所以,PHP中处理大型XML文档可以用XMLReader扩展方案

RTP协议全解(H264码流和PS流)

写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析, 其中借鉴了很多文章,我都列在了文章最后,在此表示感谢. 互联网的发展离不开大家的无私奉献,我决定从我做起,希望大家支持. 原创不易,转载请附上链接,谢谢http://blog.csdn.net/chen495810242/article/details/39207305 1.RTP Header解析   图1 1)        V:RTP协议的版本号,占2位,当前协议版本号为2 2)        P:

hdu 3667 /2010哈尔滨赛区H题 费用与流量为非线性关系/费用流

题意: 在一般费用流题目改动:路过某路,每x单位流量须要花费 ai*x^2(ai为给定的系数). 開始的的时候,一看仅仅只是是最后统计费用上在改动罢了,一看例子.发现根本没那么简单(ps:以后每次写程序前先看例子能不能过.),由于是成平方关系.每次一流量增广的话.下次未必最优!于是想到我每次仅仅增长一个单位流量.每次增长一个单位之后,该路径上的全部边的费用边改为i^2-(i-1)^2,(第一次肯定增广a,其次的话3a.5a.7a....由于第一次已经增广了,和为第i次i平方就可以! )如此.符合