System.IO.UnmanagedMemoryStream 类

方法描述

提供从托管代码访问非托管内存块的能力。

语法定义(C# System.IO.UnmanagedMemoryStream 类 的用法)

public class UnmanagedMemoryStream : Stream

构造函数

构造函数名称 构造函数描述
UnmanagedMemoryStream() 初始化 UnmanagedMemoryStream 类的新实例。
UnmanagedMemoryStream(Byte*, Int64) 用指定的位置和内存长度初始化 UnmanagedMemoryStream 类的新实例。
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) 在具有指定的偏移量和长度的安全缓冲区中初始化 UnmanagedMemoryStream 类的新实例。
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) 使用指定的位置、内存长度、内存总量和文件访问值初始化 UnmanagedMemoryStream 类的新实例。
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) 在具有指定的偏移量、长度和文件访问的安全缓冲区中初始化 UnmanagedMemoryStream 类的新实例。

成员/方法

方法名称 方法描述
BeginRead 开始异步读操作。 (继承自 Stream。)
BeginWrite 开始异步写操作。 (继承自 Stream。)
Close 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 (继承自 Stream。)
CopyTo(Stream) 从当前流中读取字节并将其写入到目标流中。 (继承自 Stream。)
CopyTo(Stream, Int32) 从当前流中读取所有字节并将其写入到目标流中(使用指定的缓冲区大小)。 (继承自 Stream。)
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
CreateWaitHandle 已过时。分配 WaitHandle 对象。 (继承自 Stream。)
Dispose() 释放由 Stream 占用的所有资源。 (继承自 Stream。)
Dispose(Boolean) 释放由 UnmanagedMemoryStream 占用的非托管资源,还可以另外再释放托管资源。 (重写 Stream.Dispose(Boolean)。)
EndRead 等待挂起的异步读取完成。 (继承自 Stream。)
EndWrite 结束异步写操作。 (继承自 Stream。)
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
Flush 重写 Flush 方法以便不执行任何操作。 (重写 Stream.Flush()。)
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
GetType 获取当前实例的 Type。 (继承自 Object。)
Initialize(Byte*, Int64, Int64, FileAccess) 使用指向非托管内存位置的指针初始化 UnmanagedMemoryStream 类的新实例。
Initialize(SafeBuffer, Int64, Int64, FileAccess) 在具有指定的偏移量、长度和文件访问的安全缓冲区中初始化 UnmanagedMemoryStream 类的新实例。
InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
MemberwiseClone() 创建当前 Object 的浅表副本。 (继承自 Object。)
MemberwiseClone(Boolean) 创建当前 MarshalByRefObject 对象的浅表副本。 (继承自 MarshalByRefObject。)
ObjectInvariant 基础结构。提供对 Contract 的支持。 (继承自 Stream。)
Read 将指定数目的字节读入指定的数组。 (重写 Stream.Read(Byte[], Int32, Int32)。)
ReadByte 从流中读取一个字节,并将流内的位置向前推进一个字节,如果已到达流的末尾,则返回 -1。 (重写 Stream.ReadByte()。)
Seek 将当前流的当前位置设置为给定值。 (重写 Stream.Seek(Int64, SeekOrigin)。)
SetLength 将流的长度设置为指定的值。 (重写 Stream.SetLength(Int64)。)
ToString 返回表示当前对象的字符串。 (继承自 Object。)
Write 使用缓冲区中的数据将字节块写入当前流。 (重写 Stream.Write(Byte[], Int32, Int32)。)
WriteByte 将一个字节写入文件流的当前位置。 (重写 Stream.WriteByte(Byte)。)

提示和注释

此类支持使用现有的基于流的模型访问非托管内存,并且不要求将非托管内存中的内容复制到堆。

System.IO.UnmanagedMemoryStream 类例子

使用 Marshal 类分配和解除分配非托管内存块。

// Note: you must compile this sample using the unsafe flag.
// From the command line, type the following: csc sample.cs /unsafe

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

unsafe class TestWriter
{

    static void Main()
	{
		
            // Create some data to read and write.
            byte[] message = UnicodeEncoding.Unicode.GetBytes("Here is some data.");

	    // Allocate a block of unmanaged memory and return an IntPtr object.	
            IntPtr memIntPtr = Marshal.AllocHGlobal(message.Length);

            // Get a byte pointer from the IntPtr object.
            byte* memBytePtr = (byte*) memIntPtr.ToPointer();

            // Create an UnmanagedMemoryStream object using a pointer to unmanaged memory.
            UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Write);

            // Write the data.
            writeStream.Write(message, 0, message.Length);

            // Close the stream.
            writeStream.Close();

            // Create another UnmanagedMemoryStream object using a pointer to unmanaged memory.
            UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Read);

	    // Create a byte array to hold data from unmanaged memory.
            byte[] outMessage = new byte[message.Length];

            // Read from unmanaged memory to the byte array.
            readStream.Read(outMessage, 0, message.Length);

            // Close the stream.
            readStream.Close();

            // Display the data to the console.
            Console.WriteLine(UnicodeEncoding.Unicode.GetString(outMessage));

            // Free the block of unmanaged memory.
            Marshal.FreeHGlobal(memIntPtr);

            Console.ReadLine();
    }
}

继承层次结构

System.Object

System.MarshalByRefObject

System.IO.Stream

System.IO.UnmanagedMemoryStream

System.IO.MemoryMappedFiles.MemoryMappedViewStream

命名空间

namespace: System.IO

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。