【C#IO 操作】stream 字节流|字符流 |比特流
stream的简介
Stream 所有流的抽象基类。 流是字节序列的抽象,例如文件、输入/输出设备、进程中通信管道或 TCP/IP 套接字。 Stream类及其派生类提供这些不同类型的输入和输出的一般视图,并将程序员与操作系统和基础设备的具体详细信息隔离开来。
.net中对于IO流的支持分为两个层次:基于比特的和基于字节两种方式,字符流是基于字节流的,用不同的编码方式读取字节流。
字符流:实现System.IO.TextReader和TextWaiter抽象类是所有基于字符流的父类,以特定编码从字节流中读取字符。
字节流:基于字节的方式适用于操作二进制文件,比如exe文件、视频、音频文件等等。
Stream抽象类是所有基于字节方式的流的父类。
字符流中TextReader和TextWaiter是抽象类是stream的读写器。
stream的操作方式
流涉及三个基本操作:
可以从流中读取。 读取是将数据从流传输到数据结构(如字节数组)中。
可以写入流。 写入是指将数据从数据结构传输到流中。
流可以支持查找。 查找是指查询和修改流中的当前位置。 查找功能取决于流具有的后备存储的类型。 例如,网络流没有当前位置的统一概念,因此通常不支持查找。
继承自的一些常用流 Stream 是 FileStream 、和 MemoryStream 。
根据基础数据源或存储库,流可能只支持其中一些功能。 您可以使用 CanRead 类的、和属性查询流的功能 CanWrite CanSeek Stream 。
Read和 Write 方法读取和写入各种格式的数据。 对于支持查找的流,请使用 Seek 和 SetLength 方法,并使用 Position 和 Length 属性来查询和修改流的当前位置和长度。
此类型实现 IDisposable 接口。 在使用完类型后,您应直接或间接释放类型。 若要直接释放类型,请在
try
/catch
块中调用其 Dispose 方法。 若要间接释放类型,请使用using
(在 C# 中)或Using
(在 Visual Basic 中)等语言构造。 有关详细信息,请参阅 IDisposable 接口主题中的“使用实现 IDisposable 的对象”一节。释放 Stream 对象将刷新所有缓冲数据,并在本质上调用 Flush 方法。 Dispose 还会释放操作系统资源(如文件句柄、网络连接或用于任何内部缓冲的内存)。 BufferedStream类提供了围绕另一个流包装缓冲流以提高读写性能的功能。
从 .NET Framework 4.5 开始, Stream 类包括异步方法来简化异步操作。 异步方法
Async
在其名称中包含,例如 ReadAsync 、、 WriteAsync CopyToAsync 和 FlushAsync 。 利用这些方法,您可以在不阻塞主线程的情况下执行占用大量资源的 i/o 操作。 在 Windows 8.x 应用商店应用或桌面应用中一个耗时的流操作可能阻塞 UI 线程并让应用看起来好像不工作时,这种性能的考虑就显得尤为重要了。 异步方法与async
await
Visual Basic 和 c # 中的和关键字结合使用。在 Windows 8.x 应用商店应用中使用时, Stream 包括两个扩展方法: AsInputStream 和 AsOutputStream 。 这些方法将 Stream 对象转换为 Windows 运行时中的流。 还可以使用和方法将 Windows 运行时中的流转换为 Stream 对象 AsStreamForRead AsStreamForWrite 。 有关详细信息,请参阅 如何:在 .NET Framework 流和 Windows 运行时流之间转换
某些流实现执行基础数据的本地缓冲以提高性能。 对于此类流,可以使用 Flush 或 FlushAsync 方法来清除任何内部缓冲区,并确保所有数据都已写入基础数据源或存储库。
如果需要一个没有后备存储的流 (也称为 "位桶") ,请使用 Null 字段检索为此目的而设计的流的实例。
【C#IO 操作】stream 字节流|字符流 |比特流的更多相关文章
- java的IO操作:字节流与字符流操作
流的概念 程序中的输入输出都是以流形式,流中保存的实际上都是字节文件. 字节流与字符流 字节流的操作: 1)输入:inputStream, 2)输出:outPutStream; 字符流的操作: 1)输 ...
- 八. 输入输出(IO)操作2.面向字符的输入流
字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件. Reader和Writer是java.io包中所有字符流的父类.由于它们都是抽象类,所以应使用 ...
- uniapp中拿到base64转blob对象,或base64转bytes字节数组,io操作写入字节流文件bytes
1. uniAPP中拿到附件的base64如何操作,如word文件 /*** 实现思路:* 通过native.js的io操作创建文件,拿到平台绝对路径* 再通过原生类进行base64解码,拿到字节流b ...
- 八. 输入输出(IO)操作3.面向字符的输出流
面向字符的输出流都是类 Writer 的子类,其类层次结构如图 10-5 所示. 图10-5 Writer的类层次结构图 表 10-3 列出了 Writer 的主要子类及说明. 表 10-3 Writ ...
- .net System.IO之Stream的使用详解
本篇文章是对.Net中System.IO之Stream的使用进行了详细的分析介绍,需要的朋友参考下 Stream在msdn的定义:提供字节序列的一般性视图(provides a generic vie ...
- java.io中流的操作:字节流、字符流
java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- Java之IO流(字节流,字符流)
IO流和Properties IO流 IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键, 因而所有 I/O 的主体实际上是内置在操作系统中的.单独的 ...
- IO流(字节流,字符流,缓冲流)
一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流 这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图: 二:字符字节 ...
随机推荐
- Superset SSO改造和自定义宏命令
目录 背景 关于Superset 需要解决的问题 定制化改造 准备环境 改造OAuth SSO 安装依赖 配置SSO 添加自定义的SecurityManager 运行一下吧 自定义宏命令 开启配置 添 ...
- golang中如何退出goroutine
package main import ( "fmt" "runtime" "time" ) func main() { // 用gorou ...
- 主键约束(primary key 简称PK)
7.5.主键约束 主键约束相关术语 主键约束 主键字段:字段添加了主键约束,叫主键字段 主键值:主键字段中的每个值都叫主键值 什么是主键? 主键值是每一行记录的唯一标识(主键值是每一行记录的身份证号) ...
- Qt中添加静态库.lb,.a和动态库.dll,.so,头文件和.cpp文件
添加步骤 1.-Qt Creator中,"项目"------"添加库"2.把静态库和动态库文件放到项目文件夹中3.在.pro文件中会添加如下代码: - 添加动态 ...
- 『无为则无心』Python基础 — 42、Python中文件的读写操作(二)
目录 (5)文件对象方法(重点) 1)写方法 2)读方法 3)seek()方法 4)tell()方法 (6)关闭 (7)综合练习:读取大文件 (5)文件对象方法(重点) 1)写方法 @1.语法 对象对 ...
- 如何在pyqt中自定义SwitchButton
前言 网上有很多 SwitchButton 的实现方式,大部分是通过重写 paintEvent() 来实现的,感觉灵活性不是很好.所以希望实现一个可以联合使用 qss 来更换样式的 SwitchBut ...
- 聊一聊如何用C#轻松完成一个TCC分布式事务
背景 银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的 ACID ,只能够通过分布式事务来解决. 在 聊一聊如何 ...
- AT2657 [ARC078D] Mole and Abandoned Mine
简要题解如下: 记 \(1\) 到 \(n\) 的路径为关键路径. 注意到关键路径只有一条是解题的关键,可以思考这张图长什么样子. 不难发现关键路径上所有边均为桥,因此大致上是关键路径上每个点下面挂了 ...
- kafka经验
1.kafka集群搭建 解压 配环境变量 修改配置文件 2.编写管理脚本去管理集群 3.kafka常用命令 4.kafka监控 5.分享kafka经验
- 原生js获取子元素
感谢原文作者:归一山人 原文链接:https://www.cnblogs.com/guiyishanren/p/12214757.html 获取子元素的方法有 //获取第一个demo类 dom = d ...