System.IO.UnmanagedMemoryStream 类
上一篇:System.IO.UnmanagedMemoryAccessor.WriteArray{T} 方法
下一篇:System.IO.UnmanagedMemoryStream.Dispose(Boolean) 方法
方法描述
提供从托管代码访问非托管内存块的能力。
语法定义(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(); } }
线程安全
此类型的任何公共 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 系统要求。
相关资源
上一篇:System.IO.UnmanagedMemoryAccessor.WriteArray{T} 方法
下一篇:System.IO.UnmanagedMemoryStream.Dispose(Boolean) 方法