计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件)。图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件,由一些字符的串行组成,具有一定的编码规则。如果你将文本文件通过修改后缀的方式修改成图片,但对于程序来说本质上还是文本文件。

FileStream类——这个类主要用于在二进制文件中读写二进制数据——也可以使用它读写任何文件。 流是传输数据的对象,介于程序中直接与流交互,可以将流理解为数据本身。一个FileStream的实例可以理解为一个具体的文件。

System.IO.MemoryStream类和System.Net.Sockets.NetworkStream类。

继承关系如下图(除NetWorkStream CryptoStream外,其他均在System.IO下):

流,都是写一点多一点。从流中读一点,流就少一点,可以通过方法返回的数据来判断流读到哪了。

在使用完流后记得释放流

  • Dispose(true),关闭基础流,释放 System.IO.StreamReader 使用的非托管资源和托管资源。
  • Dispose(false),关闭基础流,仅释放非托管资源。
  • Close(),关闭 System.IO.StreamReader 对象和基础流,并释放与读取器关联的所有系统资源。允许其他应用程序为同一个文件设置流。这个操作也会刷新缓冲区。
  • 当一个类里面既有Close又有Dispose时,基本这两个函数干的事情是差不多的。

https://referencesource.microsoft.com/#mscorlib/system/io/stream.cs源码

C# 托管资源与非托管资源 - 改变从今天开始 - 博客园​www.cnblogs.com

  • 托管代码:为.NET编写的代码,交由CLR管理(其中包含了GC服务)
  • 非托管代码:不在CLR控制下运行的代码。比如Win32 C/C++ DLL

FileStream使用举例

FileStream读取

FileStream写入


StreamReader(流读取器)StreamWriter(流写入器)——这两个类可以对文本文件应用程序进行读写;文本文件有不同的编码格式,StreamReader会帮我们自动处理,你也可以指定编码格式去读写流。除此之外,还能对应用程序进行标准的输入输出,常见于对Process输入输出;可以将这读取器或写入器理解为单向的管道,给予我们读写的能力。这两种管道也是专门处理流的。而管道是建立在流的基础之上的。可以通过参数:路径字符串,已有文件流构件管道,还可以通过FileInfo的实例的CreateText()方法来构建管道。

与流相同的是:管道也要CloseDispose,只有Dispose(false)是只关管道,不关流。

StreamReader源码

StreamReader示例

StreamWriter示例

【转】!C#中的Stream相关相关推荐

  1. JDK1.8中的Stream详解

    Stream简介 Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 XML ...

  2. 《从0到1学习Flink》—— 介绍Flink中的Stream Windows

    前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...

  3. mapper文件cant resolve param_Nodejs 中基于 Stream 的多文件合并实现

    本文先从一个 Stream 的基本示例开始,有个初步认识,中间会讲在 Stream 中什么时候会出现内存泄漏,及如何避免最后基于 Nodejs 中的 Stream 实现一个多文件合并为一个文件的例子. ...

  4. node中的Stream-Readable和Writeable解读

    在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...

  5. java8的lambda中的map相关操作

    0 入门详解篇 1   史上最简单入门:java8的lambda中的map相关操作:基础及注意事项图文详解 2   java8的lambda中collect接口案例及原理详解,官方文档解读 3   j ...

  6. LLVM中的String相关

    LLVM中的String相关 1. 传递字符串(`StringRef` 类和 `Twine` 类) 1.1 `StringRef`类 1.1.1 StringRef.getAsInteger()成员函 ...

  7. 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?

    写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...

  8. Java中Date各种相关用法

    Java中Date各种相关用法 本文主要介绍Java中Date各种相关用法. AD:   Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=C ...

  9. opengl 粒子按轨迹运动_袁讲经典4:一个粒子在电场中的运动轨迹相关问题

    袁讲经典4:一个粒子在电场中的运动轨迹相关问题 如上图,带电粒子在电场中(电场线如图)从A运动到B,则: 1.判断A和B处的受力大小和加速度大小 电场力大小 电场线密的地方电场强度大 A处的电场强度小 ...

最新文章

  1. 如何在python中创建列表副本,在Python中切片列表而不生成副本
  2. 计算机动画课程设计,计算机动画课程设计.doc
  3. 我每天路过胡同的飞鸽传书
  4. 短视频源码:新兴行业的一匹黑马
  5. eBay把平台更新为Kubernetes、Envoy和Kafka:计划开源硬件和软件
  6. xci转nsp工具_【ns新系统11.0.0发布】安装工具已经更新至4.2【后面附上批处理内容修改】...
  7. DCDC电源芯片的引脚功能及应用-BUCK芯片和BOOST芯片
  8. MPLAB PICKIT3、MPLAB SIM调试
  9. Arduino--土壤湿度传感器使用(电阻式)
  10. C#POP3协议实现SSL验证登陆GMAIL
  11. Android 屏蔽Menu键
  12. Java Logging之JUL系列——Filter
  13. if_attact中几个宏定义
  14. 哈雷haley教你如何用你的手机测试你的移动端项目
  15. Java Json格式化工具
  16. PNAS:控制缺乏情感的肢体语言的大脑回路
  17. Docker复习07——Docker 网络
  18. Python实现一个全国各高校查询系统
  19. 《系统化思维导论》杂谈
  20. USB Type-C 协议

热门文章

  1. Spring Aop——给Advice传递参数
  2. 关于windows cmd的一些便捷应用
  3. [转]ASP.NET MVC4中@model使用多个类型实例的方法
  4. Linux的#和$区别
  5. Shell脚本完成hadoop的集群安装
  6. lua cURL使用笔记
  7. log4j无厘头异常
  8. 博士期间要注意的几个问题
  9. ios信号从4g变成无服务器,苹果信号满格显示是4g却没网络
  10. action无法传参数给html页面,HTML 解决form表单提交时,action url中参数无效问题