创建其支持存储区为内存的流。
继承层次结构System.Object
System.MarshalByRefObject
System.IO.Stream
System.IO.MemoryStream
命名空间:System.IO
程序集:mscorlib(在mscorlib.dll 中)语法
C#C++F#VB
[SerializableAttribute][ComVisibleAttribute(true)]public class MemoryStream : Stream
MemoryStream类型公开以下成员。
构造函数名称 | 说明 | |
---|---|---|
MemoryStream() | MemoryStreamclass with an expandable capacity initialized to zero."xml:space="preserve">使用初始化为零的可扩展容量初始化MemoryStream类的新实例。 | |
MemoryStream(Byte[]) | MemoryStream class based on the specified byte array."xml:space="preserve">基于指定的字节数组初始化MemoryStream类的无法调整大小的新实例。 | |
MemoryStream(Int32) | MemoryStreamclass with an expandable capacity initialized as specified."xml:space="preserve">使用按指定要求初始化的可扩展容量初始化MemoryStream类的新实例。 | |
MemoryStream(Byte[],Boolean) | MemoryStream class based on the specified byte array withthe CanWrite property set asspecified."xml:space="preserve">使用按指定要求设置的CanWrite属性基于指定的字节数组初始化MemoryStream类的无法调整大小的新实例。 | |
MemoryStream(Byte[],Int32, Int32) | MemoryStream class based on the specified region (index) ofa byte array."xml:space="preserve">基于字节数组的指定区域(索引)初始化MemoryStream类的无法调整大小的新实例。 | |
MemoryStream(Byte[],Int32, Int32, Boolean) | MemoryStream class based on the specified region of a bytearray, with the CanWriteproperty set as specified."xml:space="preserve">使用按指定要求设置的CanWrite属性基于字节数组的指定区域初始化MemoryStream类的无法调整大小的新实例。 | |
MemoryStream(Byte[],Int32, Int32, Boolean, Boolean) | MemoryStreamclass based on the specified region of a byte array, with theCanWrite property set asspecified, and the ability to callGetBuffer set as specified."xml:space="preserve">在按指定要求设置CanWrite属性而且能够调用按指定要求设置的GetBuffer的情况下,基于字节数组的指定区域初始化MemoryStream类的新实例。 |
名称 | 说明 | |
---|---|---|
CanRead | 获取一个值,该值指示当前流是否支持读取。(重写Stream.CanRead。) | |
CanSeek | 获取一个值,该值指示当前流是否支持查找。(重写Stream.CanSeek。) | |
CanTimeout | 获取一个值,该值确定当前流是否可以超时。(继承自Stream。) | |
CanWrite | 获取一个值,该值指示当前流是否支持写入。(重写Stream.CanWrite。) | |
Capacity | 获取或设置分配给该流的字节数。 | |
Length | 获取用字节表示的流长度。(重写Stream.Length。) | |
Position | 获取或设置流中的当前位置。(重写Stream.Position。) | |
ReadTimeout | 获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试读取多长时间。(继承自Stream。) | |
WriteTimeout | 获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试写入多长时间。(继承自Stream。) |
名称 | 说明 | |
---|---|---|
BeginRead | 开始异步读操作。ReadAsyncinstead; see the Remarks section.)"xml:space="preserve">(考虑使用ReadAsync进行替换;请参见“备注”部分。)(继承自Stream。) | |
BeginWrite | 开始异步写操作。WriteAsyncinstead; see the Remarks section.)"xml:space="preserve">(考虑使用WriteAsync进行替换;请参见“备注”部分。)(继承自Stream。) | |
Close | 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。不直接调用此方法,而应确保流得以正确释放。(继承自Stream。) | |
CopyTo(Stream) | 从当前流中读取字节并将其写入到另一流中。(继承自Stream。) | |
CopyTo(Stream,Int32) | 从当前流中读取字节并将其写入到另一流中(使用指定的缓冲区大小)。(继承自Stream。) | |
CopyToAsync(Stream) | 从当前流中异步读取所有字节并将其写入到另一个流中。(继承自Stream。) | |
CopyToAsync(Stream,Int32) | 从当前流中异步读取字节并将其写入到另一流中(使用指定的缓冲区大小)。(继承自Stream。) | |
CopyToAsync(Stream,Int32, CancellationToken) | 使用指定的缓冲区大小和取消标记,异步读取从当前流中读取和写入的所有字节到另一个流,。(重写Stream.CopyToAsync(Stream,Int32, CancellationToken)。) | |
CreateObjRef | 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。(继承自MarshalByRefObject。) | |
CreateWaitHandle | 已过时。WaitHandleobject." xml:space="preserve">分配WaitHandle对象。(继承自Stream。) | |
Dispose() | Stream."xml:space="preserve">释放由Stream使用的所有资源。(继承自Stream。) | |
Dispose(Boolean) | MemoryStream class and optionally releases the managedresources."xml:space="preserve">释放MemoryStream类使用的非托管资源,并可以选择释放托管资源。(重写Stream.Dispose(Boolean)。) | |
EndRead | 等待挂起的异步读取完成。ReadAsyncinstead; see the Remarks section.)"xml:space="preserve">(考虑使用ReadAsync进行替换;请参见“备注”部分。)(继承自Stream。) | |
EndWrite | 结束异步写操作。WriteAsyncinstead; see the Remarks section.)"xml:space="preserve">(考虑使用WriteAsync进行替换;请参见“备注”部分。)(继承自Stream。) | |
Equals(Object) | 确定指定的对象是否等于当前对象。(继承自Object。) | |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。(继承自Object。) | |
Flush | Stream.Flushmethod so that no action is performed."xml:space="preserve">重写Stream.Flush方法以便不执行任何操作。(重写Stream.Flush()。) | |
FlushAsync() | 异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中。(继承自Stream。) | |
FlushAsync(CancellationToken) | 异步清除此流中的任何缓冲区,并监视取消请求。(重写Stream.FlushAsync(CancellationToken)。) | |
GetBuffer | 返回从其创建此流的无符号字节数组。 | |
GetHashCode | 用作特定类型的哈希函数。(继承自Object。) | |
GetLifetimeService | 检索控制此实例的生存期策略的当前生存期服务对象。(继承自MarshalByRefObject。) | |
GetType | Type ofthe current instance."xml:space="preserve">获取当前实例的Type。(继承自Object。) | |
InitializeLifetimeService | 获取控制此实例的生存期策略的生存期服务对象。(继承自MarshalByRefObject。) | |
MemberwiseClone() | Object."xml:space="preserve">创建当前Object的浅表副本。(继承自Object。) | |
MemberwiseClone(Boolean) | MarshalByRefObject object."xml:space="preserve">创建当前MarshalByRefObject对象的浅表副本。(继承自MarshalByRefObject。) | |
ObjectInvariant | 基础结构。已过时。Contract."xml:space="preserve">提供对Contract的支持。(继承自Stream。) 在 .NET Framework Client Profile 中,此成员由ObjectInvariant()重写。 | |
Read | 从当前流中读取字节块并将数据写入缓冲区中。(重写Stream.Read(Byte[],Int32, Int32)。) | |
ReadAsync(Byte[],Int32, Int32) | 从当前流异步读取字节序列,并将流中的位置向前移动读取的字节数。(继承自Stream。) | |
ReadAsync(Byte[],Int32, Int32, CancellationToken) | 异步读取字节顺序从当前流中,通过读取的字节数提升在流中的位置,并监视取消请求。(重写Stream.ReadAsync(Byte[],Int32, Int32, CancellationToken)。) | |
ReadByte | 从当前流中读取一个字节。(重写Stream.ReadByte()。) | |
Seek | 将当前流中的位置设置为指定值。(重写Stream.Seek(Int64,SeekOrigin)。) | |
SetLength | 将当前流的长度设为指定值。(重写Stream.SetLength(Int64)。) | |
ToArray | Position property."xml:space="preserve">将流内容写入字节数组,而与Position属性无关。 | |
ToString | 返回表示当前对象的字符串。(继承自Object。) | |
Write | 使用从某个缓冲区读取的数据将字节块写入当前流。(重写Stream.Write(Byte[],Int32, Int32)。) | |
WriteAsync(Byte[],Int32, Int32) | 将字节序列异步写入当前流,并将流的当前位置向前移动写入的字节数。(继承自Stream。) | |
WriteAsync(Byte[],Int32, Int32, CancellationToken) | 异步写入字节序列与当前流、事先当前位置此流中由编写的字节数和监视取消的请求。(重写Stream.WriteAsync(Byte[],Int32, Int32, CancellationToken)。) | |
WriteByte | 将一个字节写入当前流中的当前位置。(重写Stream.WriteByte(Byte)。) | |
WriteTo | 将此内存流的整个内容写入另一个流中。 |
名称 | 说明 | |
---|---|---|
AsInputStream | 将 适用于 Windows 应用商店应用的 .NET 中一个托管的流转换为 Windows运行时 中的输入流。(由WindowsRuntimeStreamExtensions定义。) | |
AsOutputStream | 将 适用于 Windows 应用商店应用的 .NET 中一个托管的流转换为 Windows运行时 中的输出流。(由WindowsRuntimeStreamExtensions定义。) | |
GetWindowsRuntimeBuffer() | 已重载。Windows.Storage.Streams.IBufferinterface that represents the same memory as the specified memorystream. "xml:space="preserve">返回表示内存和指定的内存流相同的Windows.Storage.Streams.IBuffer接口。(由WindowsRuntimeBufferExtensions定义。) | |
GetWindowsRuntimeBuffer(Int32,Int32) | 已重载。Windows.Storage.Streams.IBufferinterface that represents a region within the memory that thespecified memory stream represents. "xml:space="preserve">返回表示在内存中的一个区域指定的内存流表示的Windows.Storage.Streams.IBuffer接口。(由WindowsRuntimeBufferExtensions定义。) |
流的当前位置是下一个读取或写入操作可能发生的位置。Seekmethod."xml:space="preserve">当前位置可以通过Seek方法检索或设置。MemoryStreamis created, the current position is set to zero."xml:space="preserve">在创建MemoryStream的新实例时,当前位置设置为零。
用无符号字节数组创建的内存流提供无法调整大小的数据流。当使用字节数组时,虽然根据传递到构造函数中的参数可能能够修改现有内容,但既不能追加也不能收缩流。空内存流是可调整大小的,而且可以向其写入和从中读取。
MemoryStream object isadded to a ResX file or a .resources file, call theGetStream method at runtimeto retrieve it."xml:space="preserve">如果将MemoryStream对象添加到ResX 文件或 .resources 文件中,则可在运行时调用GetStream方法对其进行检索。
MemoryStream object isserialized to a resource file it will actually be serialized as anUnmanagedMemoryStream."xml:space="preserve">如果将MemoryStream对象序列化为资源文件,它将被实际序列化为UnmanagedMemoryStream。Streammethods."xml:space="preserve">此行为可以提供更好的性能,并可以提供将指针直接指向数据的功能,而不必使用Stream方法。
示例下面的代码示例说明如何通过将内存用作备份来读取和写入数据。
C#C++VBusing System;using System.IO;using System.Text;class MemStream{ static void Main() { int count; byte[] byteArray; char[] charArray; UnicodeEncoding uniEncoding = new UnicodeEncoding(); // Create the data to write to the stream. byte[] firstString = uniEncoding.GetBytes( "Invalid file path characters are: "); byte[] secondString = uniEncoding.GetBytes( Path.GetInvalidPathChars()); using(MemoryStream memStream = new MemoryStream(100)) { // Write the first string to the stream. memStream.Write(firstString, 0 , firstString.Length); // Write the second string to the stream, byte by byte. count = 0; while(count < secondString.Length) { memStream.WriteByte(secondString[count++]); } // Write the stream properties to the console. Console.WriteLine( "Capacity = {0}, Length = {1}, Position = {2}n", memStream.Capacity.ToString(), memStream.Length.ToString(), memStream.Position.ToString()); // Set the position to the beginning of the stream. memStream.Seek(0, SeekOrigin.Begin); // Read the first 20 bytes from the stream. byteArray = new byte[memStream.Length]; count = memStream.Read(byteArray, 0, 20); // Read the remaining bytes, byte by byte. while(count < memStream.Length) { byteArray[count++] = Convert.ToByte(memStream.ReadByte()); } // Decode the byte array into a char array // and write it to the console. charArray = new char[uniEncoding.GetCharCount( byteArray, 0, count)]; uniEncoding.GetDecoder().GetChars( byteArray, 0, count, charArray, 0); Console.WriteLine(charArray); } }}版本信息
.NET Framework
受以下版本支持:4.5、4、3.5、3.0、2.0、1.1、1.0.NET Framework Client Profile
受以下版本支持:4、3.5 SP1可移植类库
受以下版本支持:可移植类库适用于 Windows 应用商店应用的 .NET
受以下版本支持:Windows 8平台
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2,Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1或更高版本的服务器核心角色;不支持 Itanium)
.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NETFramework 系统要求。线程安全此类型的任何公共static(在 Visual Basic中为Shared)成员都是线程安全的。但不保证所有实例成员都是线程安全的。请参见