【C#IO 操作】stream 字节流|字符流 |比特流

 

stream的简介

Stream 所有流的抽象基类。 流是字节序列的抽象,例如文件、输入/输出设备、进程中通信管道或 TCP/IP 套接字。 Stream类及其派生类提供这些不同类型的输入和输出的一般视图,并将程序员与操作系统和基础设备的具体详细信息隔离开来。

.net中对于IO流的支持分为两个层次:基于比特的和基于字节两种方式,字符流是基于字节流的,用不同的编码方式读取字节流。

字符流:实现System.IO.TextReader和TextWaiter抽象类是所有基于字符流的父类,以特定编码从字节流中读取字符。

字节流:基于字节的方式适用于操作二进制文件,比如exe文件、视频、音频文件等等。
Stream抽象类是所有基于字节方式的流的父类。

字符流中TextReader和TextWaiter是抽象类是stream的读写器。

stream的操作方式

流涉及三个基本操作:

  • 可以从流中读取。 读取是将数据从流传输到数据结构(如字节数组)中。

  • 可以写入流。 写入是指将数据从数据结构传输到流中。

  • 流可以支持查找。 查找是指查询和修改流中的当前位置。 查找功能取决于流具有的后备存储的类型。 例如,网络流没有当前位置的统一概念,因此通常不支持查找。

     

     

    继承自的一些常用流 StreamFileStream 、和 MemoryStream

    根据基础数据源或存储库,流可能只支持其中一些功能。 您可以使用 CanRead 类的、和属性查询流的功能 CanWrite CanSeek Stream

    ReadWrite 方法读取和写入各种格式的数据。 对于支持查找的流,请使用 SeekSetLength 方法,并使用 PositionLength 属性来查询和修改流的当前位置和长度。

    此类型实现 IDisposable 接口。 在使用完类型后,您应直接或间接释放类型。 若要直接释放类型,请在 try/catch 块中调用其 Dispose 方法。 若要间接释放类型,请使用 using(在 C# 中)或 Using(在 Visual Basic 中)等语言构造。 有关详细信息,请参阅 IDisposable 接口主题中的“使用实现 IDisposable 的对象”一节。

    释放 Stream 对象将刷新所有缓冲数据,并在本质上调用 Flush 方法。 Dispose 还会释放操作系统资源(如文件句柄、网络连接或用于任何内部缓冲的内存)。 BufferedStream类提供了围绕另一个流包装缓冲流以提高读写性能的功能。

    从 .NET Framework 4.5 开始, Stream 类包括异步方法来简化异步操作。 异步方法 Async 在其名称中包含,例如 ReadAsync 、、 WriteAsync CopyToAsyncFlushAsync利用这些方法,您可以在不阻塞主线程的情况下执行占用大量资源的 i/o 操作。 在 Windows 8.x 应用商店应用或桌面应用中一个耗时的流操作可能阻塞 UI 线程并让应用看起来好像不工作时,这种性能的考虑就显得尤为重要了。 异步方法与 async await Visual Basic 和 c # 中的和关键字结合使用。

    在 Windows 8.x 应用商店应用中使用时, Stream 包括两个扩展方法: AsInputStreamAsOutputStream这些方法将 Stream 对象转换为 Windows 运行时中的流。 还可以使用和方法将 Windows 运行时中的流转换为 Stream 对象 AsStreamForRead AsStreamForWrite有关详细信息,请参阅 如何:在 .NET Framework 流和 Windows 运行时流之间转换

    某些流实现执行基础数据的本地缓冲以提高性能。 对于此类流,可以使用 FlushFlushAsync 方法来清除任何内部缓冲区,并确保所有数据都已写入基础数据源或存储库。

    如果需要一个没有后备存储的流 (也称为 "位桶") ,请使用 Null 字段检索为此目的而设计的流的实例。

  •  

posted @ 2021-11-17 16:34  小林野夫  阅读(1137)  评论(0编辑  收藏  举报
原文链接:https://www.cnblogs.com/cdaniu/