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

MemoryStream 类

 

创建一个流,其后备存储为内存。

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

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

System.Object
  System.MarshalByRefObject
    System.IO.Stream
      System.IO.MemoryStream

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class MemoryStream : Stream

名称说明
System_CAPS_pubmethodMemoryStream()

使用初始化为零的可扩展容量初始化 MemoryStream 类的新实例。

System_CAPS_pubmethodMemoryStream(Byte[])

基于指定的字节数组初始化 MemoryStream 类的无法调整大小的新实例。

System_CAPS_pubmethodMemoryStream(Byte[], Boolean)

CanWrite 属性按指定设置的状态下,基于指定的字节数组初始化 MemoryStream 类的无法调整大小的新实例。

System_CAPS_pubmethodMemoryStream(Byte[], Int32, Int32)

基于字节数组的指定区域(索引)初始化 MemoryStream 类的无法调整大小的新实例。

System_CAPS_pubmethodMemoryStream(Byte[], Int32, Int32, Boolean)

CanWrite 属性按指定设置的状态下,基于字节数组的指定区域,初始化 MemoryStream 类的无法调整大小的新实例。

System_CAPS_pubmethodMemoryStream(Byte[], Int32, Int32, Boolean, Boolean)

CanWrite 属性和调用 GetBuffer 的能力按指定设置的状态下,基于字节数组的指定区域初始化 MemoryStream 类的新实例。

System_CAPS_pubmethodMemoryStream(Int32)

使用按指定要求初始化的可扩展容量初始化 MemoryStream 类的新实例。

名称说明
System_CAPS_pubpropertyCanRead

获取一个值,该值指示当前流是否支持读取。(覆盖 Stream.CanRead。)

System_CAPS_pubpropertyCanSeek

获取一个值,该值指示当前流是否支持查找。(覆盖 Stream.CanSeek。)

System_CAPS_pubpropertyCanTimeout

获取一个值,该值确定当前流是否可以超时。(继承自 Stream。)

System_CAPS_pubpropertyCanWrite

获取一个值,该值指示当前流是否支持写入。(覆盖 Stream.CanWrite。)

System_CAPS_pubpropertyCapacity

获取或设置分配给该流的字节数。

System_CAPS_pubpropertyLength

获取流的长度(以字节为单位)。(覆盖 Stream.Length。)

System_CAPS_pubpropertyPosition

获取或设置流中的当前位置。(覆盖 Stream.Position。)

System_CAPS_pubpropertyReadTimeout

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

System_CAPS_pubpropertyWriteTimeout

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

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

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

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

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

System_CAPS_pubmethodClose()

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

System_CAPS_pubmethodCopyTo(Stream)

从当前流中读取字节并将其写入到另一流中。(继承自 Stream。)

System_CAPS_pubmethodCopyTo(Stream, Int32)

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

System_CAPS_pubmethodCopyToAsync(Stream)

从当前流中异步读取字节并将其写入到另一个流中。(继承自 Stream。)

System_CAPS_pubmethodCopyToAsync(Stream, Int32)

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

System_CAPS_pubmethodCopyToAsync(Stream, Int32, CancellationToken)

使用指定的缓冲区大小和取消令牌,从当前流中异步读取所有字节并将其写入到另一个流中。(覆盖 Stream.CopyToAsync(Stream, Int32, CancellationToken)。)

System_CAPS_pubmethodCreateObjRef(Type)

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

System_CAPS_protmethodCreateWaitHandle()

已过时。 分配 WaitHandle 对象。(继承自 Stream。)

System_CAPS_pubmethodDispose()

释放由 Stream 使用的所有资源。(继承自 Stream。)

System_CAPS_protmethodDispose(Boolean)

释放 MemoryStream 类使用的非托管资源,并可以选择释放托管资源。(覆盖 Stream.Dispose(Boolean)。)

System_CAPS_pubmethodEndRead(IAsyncResult)

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

System_CAPS_pubmethodEndWrite(IAsyncResult)

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

System_CAPS_pubmethodEquals(Object)

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

System_CAPS_protmethodFinalize()

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

System_CAPS_pubmethodFlush()

重写 Stream.Flush 方法以便不执行任何操作。(覆盖 Stream.Flush()。)

System_CAPS_pubmethodFlushAsync()

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

System_CAPS_pubmethodFlushAsync(CancellationToken)

异步清除此流的所有缓冲区,并监视取消请求。(覆盖 Stream.FlushAsync(CancellationToken)。)

System_CAPS_pubmethodGetBuffer()

返回从中创建此流的无符号字节的数组。

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 的支持。(继承自 Stream。)

System_CAPS_pubmethodRead(Byte[], Int32, Int32)

从当前流中读取字节块并将数据写入缓冲区。(覆盖 Stream.Read(Byte[], Int32, Int32)。)

System_CAPS_pubmethodReadAsync(Byte[], Int32, Int32)

从当前流异步读取字节序列,并将流中的位置提升读取的字节数。(继承自 Stream。)

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

从当前流异步读取字节的序列,将流中的位置提升读取的字节数,并监视取消请求。(覆盖 Stream.ReadAsync(Byte[], Int32, Int32, CancellationToken)。)

System_CAPS_pubmethodReadByte()

从当前流中读取一个字节。(覆盖 Stream.ReadByte()。)

System_CAPS_pubmethodSeek(Int64, SeekOrigin)

将当前流中的位置设置为指定值。(覆盖 Stream.Seek(Int64, SeekOrigin)。)

System_CAPS_pubmethodSetLength(Int64)

将当前流的长度设为指定值。(覆盖 Stream.SetLength(Int64)。)

System_CAPS_pubmethodToArray()

将流内容写入字节数组,而与 Position 属性无关。

System_CAPS_pubmethodToString()

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

System_CAPS_pubmethodTryGetBuffer(ArraySegment<Byte>)

返回从中创建此流的无符号字节的数组。 用于指示转换是否成功的返回值。

System_CAPS_pubmethodWrite(Byte[], Int32, Int32)

使用从缓冲区读取的数据将字节块写入当前流。(覆盖 Stream.Write(Byte[], Int32, Int32)。)

System_CAPS_pubmethodWriteAsync(Byte[], Int32, Int32)

将字节序列异步写入当前流,并将流的当前位置提升写入的字节数。(继承自 Stream。)

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

将字节的序列异步写入当前流,将该流中的当前位置向前移动写入的字节数,并监视取消请求。(覆盖 Stream.WriteAsync(Byte[], Int32, Int32, CancellationToken)。)

System_CAPS_pubmethodWriteByte(Byte)

将一个字节写入当前位置上的当前流。(覆盖 Stream.WriteByte(Byte)。)

System_CAPS_pubmethodWriteTo(Stream)

将此内存流的整个内容写入到另一个流中。

System_CAPS_note说明

若要查看此类型的.NET Framework 源代码,请参阅 Reference Source 您可以浏览源代码、 下载脱机查看参考资料和调试; 在逐句通过源 (包括修补程序和更新)see instructions.

流的当前位置是在其下一次读取或写入操作的位置可能发生的位置。 可以检索当前的位置或通过设置 Seek 方法。 新实例时 MemoryStream 创建后,当前位置设置为零。

System_CAPS_important重要事项

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

创建与非无符号的字节数组的内存流提供的无法调整大小的数据的流。 在使用字节数组时,您不能将追加到或缩小流,尽管您可能能够修改的现有内容,具体取决于传递到构造函数的参数。 空内存流是可调整大小,可以将写入到并读取。

如果 MemoryStream 对象添加到 ResX 文件或.resources 文件,请调用 GetStream 方法在运行时检索出来。

如果 MemoryStream 对象序列化到资源文件,它实际上会序列化为 UnmanagedMemoryStream 此行为可提供更好的性能,以及能够直接指针访问数据,而无需经历 Stream 方法。

下面的代码示例演示如何读取和写入使用内存作为后备存储的数据。

using 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);
        }
    }
}

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

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

返回页首
显示: