C# 流总

本文简单总结在C#编程中经常会用到的一些流;

比如说FileStream、MemoryStream、 BufferedStream、 NetWorkStream、 StreamReader/StreamWriter、 TextReader/TextWriter等的简单用法。

一  FileStream类

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

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

  FileStream file = File.Open(@"E:\test.jpg", FileMode.Open); //初始化文件流
  byte[] array = new byte[file.Length];//初始化字节数组
  file.Read(array, 0, array.Length);//读取流中数据把它写到字节数组中 file.Close();//关闭流
  string str = Encoding.Default.GetString(array);//将字节数组内容转化为字符串

将数据写入磁盘文件:

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

二  MemoryStream类

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

 MemoryStream操作字符串:

   string str = "NMS东软医疗";
   byte[] array = Encoding.UTF8.GetBytes(str);
   MemoryStream memory = new MemoryStream(array);
   byte[] arrayNew = memory.ToArray();
   string strNew = Encoding.UTF8.GetString(arrayNew);

三  BufferedStream类

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

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

  FileStream file1 = File.Open(@"F:\file1.txt", FileMode.OpenOrCreate, FileAccess.Read);//读取文件流
  FileStream file2 = File.Open(@"F:\file2.txt", FileMode.OpenOrCreate, FileAccess.Write);//写入文件流
  byte[] array = new byte[4096];
  BufferedStream bufferedInput = new BufferedStream(file1);//封装文件流
  BufferedStream bufferedOutput = new BufferedStream(file2);//封装文件流
  bufferedInput.Read(array, 0, array.Length);
  bufferedOutput.Write(array, 0, array.Length);

  int bytesRead = 0;
  while ((bytesRead = bufferedInput.Read(array, 0, 4096)) > 0)//读取到了数据
  {
     bufferedOutput.Write(array, 0, bytesRead);
     Console.WriteLine(bytesRead);
  }
  bufferedInput.Close();//关闭各种流
  bufferedOutput.Close();
  file1.Close();
  file2.Close();
时间: 2024-10-13 10:47:58

C# 流总的相关文章

JavaSE_ IO流 总目录(19~22)

黑马程序员_JavaSE学习总结第19天_IO流119.01 集合的特点和数据结构总结19.02 如何选择使用哪种集合19.03 集合常见功能和遍历方式总结19.04 异常的概述和分类19.05 JVM默认处理异常19.06 try...catch的方式处理异常1(一个异常)19.07 try...catch的方式处理异常2(两个异常)19.08 JDK7针对多个异常的处理方案19.09 编译期异常和运行期异常的区别19.10 Throwable的几个常见方法19.11 throws的方式处理异

java流总结(转)

java流总结转:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.   IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节

高并发限流策略

在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹:而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开:而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀.抢购).写服务(如评论.下单).频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,即限流. 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到

.NET基础拾遗(3)字符串、集合和流3

三.流和序列化 3.1 流的概念以及.NET中有哪些常见的流? 流是一种针对字节流的操作,类似于内存与文件之间的一个管道.读取文件的过程就可以看作是字节流的一个过程. 常见的流类型包括:文件流.终端操作流及网络Socket等,在.NET中,System.IO.Stream类型被设计为作为所有流类型的虚基类,当需要自定义一种流类型时也应该直接或者间接地继承自Stream类型.下图展示了在.NET中常见的流类型以及它们的类型结构: 从上图中可以发现,Stream类型继承自MarshalByRefOb

聊聊高并发系统之限流特技-1 开涛

在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹:而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开:而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀.抢购).写服务(如评论.下单).频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,即限流. 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到

高并发系统之限流特技

在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹:而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开:而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀.抢购).写服务(如评论.下单).频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,即限流. 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到

分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket

对于web应用的限流,光看标题,似乎过于抽象,难以理解,那我们还是以具体的某一个应用场景来引入这个话题吧. 在日常生活中,我们肯定收到过不少不少这样的短信,"双11约吗?,千款-.","您有幸获得唱读卡,赶快戳链接-".这种类型的短信是属于推广性质的短信.为什么我要说这个呢?听我慢慢道来. 一般而言,对于推广营销类短信,它们针对某一群体(譬如注册会员)进行定点推送,有时这个群体的成员量比较大,譬如京东的会员,可以达到千万级别.因此相应的,发送推广短信的量也会增大.然

聊聊高并发系统之限流特技

在开发高并发系统时,有很多手段用来保护系统:缓存.降级和限流.缓存的目的是提升系统访问速度和增大系统处理能力,可谓是抗高并发流量的银弹:而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰过去或者问题解决后再打开的场景:而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀.抢购).写服务(如评论.下单).频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,即限流. 限流的目的是通过对并发访问进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达

高并发之限流实现(三)

本次样例从单机层面上,采用拦截器的方式对请求限流. 资源:https://github.com/xiaozhuanfeng/rateLimiterProj 工程结构: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/