本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

Stream 类

 

提供字节序列的一般视图。 这是一个抽象类。

若要浏览此类型的.NET Framework 源代码,请参阅Reference Source

命名空间:   System.IO
程序集:  mscorlib(位于 mscorlib.dll)


[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Stream : MarshalByRefObject, IDisposable

名称说明
System_CAPS_protmethodStream()

初始化 Stream 类的新实例。

名称说明
System_CAPS_pubpropertyCanRead

当在派生类中重写时,获取指示当前流是否支持读取的值。

System_CAPS_pubpropertyCanSeek

当在派生类中重写时,获取指示当前流是否支持查找功能的值。

System_CAPS_pubpropertyCanTimeout

获取一个值,该值确定当前流是否可以超时。

System_CAPS_pubpropertyCanWrite

当在派生类中重写时,获取指示当前流是否支持写入功能的值。

System_CAPS_pubpropertyLength

当在派生类中重写时,获取流长度(以字节为单位)。

System_CAPS_pubpropertyPosition

当在派生类中重写时,获取或设置当前流中的位置。

System_CAPS_pubpropertyReadTimeout

获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试读取多长时间。

System_CAPS_pubpropertyWriteTimeout

获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试写入多长时间。

名称说明
System_CAPS_pubmethodBeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

开始异步读操作。 (考虑使用 ReadAsync 进行替换;请参见“备注”部分。)

System_CAPS_pubmethodBeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

开始异步写操作。 (考虑使用 WriteAsync 进行替换;请参见“备注”部分。)

System_CAPS_pubmethodClose()

关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 不直接调用此方法,而应确保流得以正确释放。

System_CAPS_pubmethodCopyTo(Stream)

从当前流中读取字节并将其写入到另一流中。

System_CAPS_pubmethodCopyTo(Stream, Int32)

使用指定的缓冲区大小,从当前流中读取字节并将其写入到另一流中。

System_CAPS_pubmethodCopyToAsync(Stream)

从当前流中异步读取字节并将其写入到另一个流中。

System_CAPS_pubmethodCopyToAsync(Stream, Int32)

使用指定的缓冲区大小,从当前流中异步读取字节并将其写入到另一流中。

System_CAPS_pubmethodCopyToAsync(Stream, Int32, CancellationToken)

使用指定的缓冲区大小和取消令牌,从当前流中异步读取字节并将其写入到另一个流中。

System_CAPS_pubmethodCreateObjRef(Type)

创建包含所有生成代理用于与远程对象进行通信所需的相关信息的对象。(继承自 MarshalByRefObject。)

System_CAPS_protmethodCreateWaitHandle()

已过时。 分配 WaitHandle 对象。

System_CAPS_pubmethodDispose()

释放由 Stream 使用的所有资源。

System_CAPS_protmethodDispose(Boolean)

释放由 Stream 占用的非托管资源,还可以另外再释放托管资源。

System_CAPS_pubmethodEndRead(IAsyncResult)

等待挂起的异步读取完成。 (考虑使用 ReadAsync 进行替换;请参见“备注”部分。)

System_CAPS_pubmethodEndWrite(IAsyncResult)

结束异步写操作。 (考虑使用 WriteAsync 进行替换;请参见“备注”部分。)

System_CAPS_pubmethodEquals(Object)

确定指定的对象是否等于当前对象。(继承自 Object。)

System_CAPS_protmethodFinalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(继承自 Object。)

System_CAPS_pubmethodFlush()

当在派生类中重写时,将清除该流的所有缓冲区,并使得所有缓冲数据被写入到基础设备。

System_CAPS_pubmethodFlushAsync()

异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中。

System_CAPS_pubmethodFlushAsync(CancellationToken)

异步清理这个流的所有缓冲区,并使所有缓冲数据写入基础设备,并且监控取消请求。

System_CAPS_pubmethodGetHashCode()

作为默认哈希函数。(继承自 Object。)

System_CAPS_pubmethodGetLifetimeService()

检索当前生存期服务对象,用于控制此实例的生存期策略。(继承自 MarshalByRefObject。)

System_CAPS_pubmethodGetType()

获取当前实例的 Type(继承自 Object。)

System_CAPS_pubmethodInitializeLifetimeService()

获取生存期服务对象来控制此实例的生存期策略。(继承自 MarshalByRefObject。)

System_CAPS_protmethodMemberwiseClone()

创建当前 Object 的浅表副本。(继承自 Object。)

System_CAPS_protmethodMemberwiseClone(Boolean)

创建当前的浅表副本MarshalByRefObject对象。(继承自 MarshalByRefObject。)

System_CAPS_protmethodObjectInvariant()

已过时。 此 API 支持 产品 基础结构,不应从代码直接使用。 提供对 Contract 的支持。

System_CAPS_pubmethodRead(Byte[], Int32, Int32)

当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。

System_CAPS_pubmethodReadAsync(Byte[], Int32, Int32)

从当前流异步读取字节序列,并将流中的位置提升读取的字节数。

System_CAPS_pubmethodReadAsync(Byte[], Int32, Int32, CancellationToken)

从当前流异步读取字节的序列,将流中的位置提升读取的字节数,并监视取消请求。

System_CAPS_pubmethodReadByte()

从流中读取一个字节,并将流内的位置向前提升一个字节,或者如果已到达流结尾,则返回 -1。

System_CAPS_pubmethodSeek(Int64, SeekOrigin)

当在派生类中重写时,设置当前流中的位置。

System_CAPS_pubmethodSetLength(Int64)

当在派生类中重写时,设置当前流的长度。

System_CAPS_pubmethodSystem_CAPS_staticSynchronized(Stream)

在指定的 Stream 对象周围创建线程安全(同步)包装。

System_CAPS_pubmethodToString()

返回表示当前对象的字符串。(继承自 Object。)

System_CAPS_pubmethodWrite(Byte[], Int32, Int32)

当在派生类中重写时,向当前流中写入字节序列,并将此流中的当前位置提升写入的字节数。

System_CAPS_pubmethodWriteAsync(Byte[], Int32, Int32)

将字节序列异步写入当前流,并将流的当前位置提升写入的字节数。

System_CAPS_pubmethodWriteAsync(Byte[], Int32, Int32, CancellationToken)

将字节的序列异步写入当前流,将该流中的当前位置向前移动写入的字节数,并监视取消请求。

System_CAPS_pubmethodWriteByte(Byte)

将一个字节写入流内的当前位置,并将流内的位置向前提升一个字节。

名称说明
System_CAPS_pubfieldSystem_CAPS_staticNull

无后备存储区的 Stream

System_CAPS_note说明

若要查看此类型的.NET Framework 源代码,请参阅Reference Source 你可以浏览源代码联机,请下载离线查看的引用并在调试; 过程中逐步执行源 (包括修补程序和更新)see instructions.

Stream是所有流的抽象基类。 流是字节序列的抽象,例如文件、输入/输出设备、进程中通信管道或 TCP/IP 套接字。 Stream类和派生的类提供的输入和输出,这些不同类型的通用视图,并使程序员不必了解操作系统和基础设备的具体细节。

流涉及三个基本操作:

  • 你可以从流中读取。 读取,则将数据从流传送到数据结构,如的字节数组。

  • 你可以写入流。 写入是数据的数据结构传输到流。

  • 流可以支持查找。 查找引用查询实体和修改流中的当前位置。 查找功能依赖于某个流是否的后备存储的类型。 例如,网络流的当前位置,没有统一概念,因此通常不支持查找。

一些较常用继承的流StreamFileStream,和MemoryStream

具体取决于基础数据源或存储库中,流可能支持只有某些这些功能。 你可以使用查询其功能的流CanReadCanWrite,和CanSeek属性Stream类。

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

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

释放Stream对象刷新任何缓冲的数据,并实质上调用Flush为你的方法。 Dispose也会释放文件句柄、 网络连接或所用的任何内部缓冲内存等的操作系统资源。 BufferedStream类提供了缓冲的流环绕以便提高读取和写入性能的另一个流的功能。

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

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

某些流实现执行本地缓冲的基础的数据,以改进性能。 对于这样的流,你可以使用FlushFlushAsync方法以清除所有内部缓冲区,并确保所有数据已都写入到基础数据源或存储库。

如果你需要一种数据流无后备存储区 (也称为位存储桶),使用Null字段来检索为此用途设计的流的实例。

实现函数说明:

当您实现的派生的类Stream,你必须提供实现ReadWrite方法。 异步方法ReadAsyncWriteAsync,和CopyToAsync使用同步方法ReadWrite在其实现中。 因此,你的实现ReadWrite将与异步方法一起正常工作。 默认实现ReadByteWriteByte创建一个新的单元素字节数组,然后调用的实现ReadWrite 派生自Stream,我们建议你重写这些方法以访问内部缓冲区,如果你有一个,以得到显著提高性能。 你还必须提供的实现CanReadCanSeekCanWriteFlushLengthPositionSeek,和SetLength

不会重写Close方法,而是将所有放Stream中的清理逻辑Dispose方法。 有关详细信息,请参阅实现 Dispose 方法

下面的示例演示如何使用两个FileStream要以异步方式将文件从一个目录复制到另一个目录对象。 FileStream 类是从 Stream 类派生的。 需要注意 Click 控件的 Button 事件处理程序具有 async 修饰符标记,因为它调用异步方法。

using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string StartDirectory = @"c:\Users\exampleuser\start";
            string EndDirectory = @"c:\Users\exampleuser\end";

            foreach (string filename in Directory.EnumerateFiles(StartDirectory))
            {
                using (FileStream SourceStream = File.Open(filename, FileMode.Open))
                {
                    using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
                    {
                        await SourceStream.CopyToAsync(DestinationStream);
                    }
                }
            }
        }
    }
}

通用 Windows 平台
自 8 起可用
.NET Framework
自 1.1 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用

此类型的所有公共静态(Visual Basic 中的 已共享 在 Visual Basic 中)成员都是线程安全的。不保证所有实例成员都是线程安全的。

返回页首
显示: