UnmanagedMemoryStream 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
重要
此 API 不符合 CLS 規範。
提供從 Managed 程式代碼存取 Unmanaged 記憶體區塊的存取權。
public ref class UnmanagedMemoryStream : System::IO::Stream
public class UnmanagedMemoryStream : System.IO.Stream
[System.CLSCompliant(false)]
public class UnmanagedMemoryStream : System.IO.Stream
type UnmanagedMemoryStream = class
inherit Stream
[<System.CLSCompliant(false)>]
type UnmanagedMemoryStream = class
inherit Stream
Public Class UnmanagedMemoryStream
Inherits Stream
- 繼承
- 繼承
- 衍生
- 屬性
範例
下列程式代碼範例示範如何使用 UnmanagedMemoryStream 類別讀取和寫入 Unmanaged 記憶體。 使用 Marshal 類別來配置和取消配置 Unmanaged 記憶體區塊。
// 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();
}
}
備註
這個類別支援使用現有的數據流型模型存取 Unmanaged 記憶體,而且不需要將 Unmanaged 記憶體中的內容複製到堆積。
注意
此類型會實作 IDisposable 介面,但實際上沒有任何要處置的資源。 這表示不需要直接呼叫 Dispose() 或使用語言建構,例如 using
(C#) 或 Using
(在 Visual Basic 中) 來處置它。
建構函式
UnmanagedMemoryStream() |
初始化 UnmanagedMemoryStream 類別的新實例。 |
UnmanagedMemoryStream(Byte*, Int64) |
使用指定的位置和記憶體長度,初始化 UnmanagedMemoryStream 類別的新實例。 |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
使用指定的位置、記憶體長度、記憶體總數和檔案存取值,初始化 UnmanagedMemoryStream 類別的新實例。 |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
使用指定的位移和長度,初始化安全緩衝區中 UnmanagedMemoryStream 類別的新實例。 |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
使用指定的位移、長度和檔案存取,初始化安全緩衝區中 UnmanagedMemoryStream 類別的新實例。 |
屬性
CanRead |
取得值,指出數據流是否支援讀取。 |
CanSeek |
取得值,指出數據流是否支持搜尋。 |
CanTimeout |
取得值,這個值會判斷目前的數據流是否可以逾時。 (繼承來源 Stream) |
CanWrite |
取得值,指出數據流是否支援寫入。 |
Capacity |
取得數據流長度(大小)或指派給數據流的總內存量(容量)。 |
Length |
取得數據流中的數據長度。 |
Position |
取得或設定數據流中的目前位置。 |
PositionPointer |
根據數據流中的目前位置,取得或設定數據流的位元組指標。 |
ReadTimeout |
取得或設定值,以毫秒為單位,決定數據流在逾時之前嘗試讀取的時間長度。 (繼承來源 Stream) |
WriteTimeout |
取得或設定值,以毫秒為單位,決定數據流在逾時之前嘗試寫入的時間長度。 (繼承來源 Stream) |
方法
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
開始異步讀取作業。 (請考慮改用 ReadAsync(Byte[], Int32, Int32)。 (繼承來源 Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
開始異步寫入作業。 (請考慮改用 WriteAsync(Byte[], Int32, Int32)。 (繼承來源 Stream) |
Close() |
關閉目前的數據流,並釋放與目前數據流相關聯的任何資源(例如套接字和檔句柄)。 請確定已正確處置數據流,而不是呼叫此方法。 (繼承來源 Stream) |
CopyTo(Stream) |
從目前的數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyTo(Stream, Int32) |
從目前的數據流讀取位元組,並使用指定的緩衝區大小將它們寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyToAsync(Stream) |
以異步方式從目前的數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyToAsync(Stream, CancellationToken) |
使用指定的取消標記,以異步方式從目前數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyToAsync(Stream, Int32) |
使用指定的緩衝區大小,以異步方式從目前數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
使用指定的緩衝區大小和取消標記,以異步方式從目前數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CreateObjRef(Type) |
建立物件,其中包含產生用來與遠端物件通訊之 Proxy 所需的所有相關信息。 (繼承來源 MarshalByRefObject) |
CreateWaitHandle() |
已淘汰.
已淘汰.
已淘汰.
配置 WaitHandle 物件。 (繼承來源 Stream) |
Dispose() |
釋放 Stream所使用的所有資源。 (繼承來源 Stream) |
Dispose(Boolean) |
釋放 UnmanagedMemoryStream 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。 |
DisposeAsync() |
以異步方式釋放 Stream所使用的 Unmanaged 資源。 (繼承來源 Stream) |
EndRead(IAsyncResult) |
等候暫止的異步讀取完成。 (請考慮改用 ReadAsync(Byte[], Int32, Int32)。 (繼承來源 Stream) |
EndWrite(IAsyncResult) |
結束異步寫入作業。 (請考慮改用 WriteAsync(Byte[], Int32, Int32)。 (繼承來源 Stream) |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
Flush() |
覆寫 Flush() 方法,因此不會執行任何動作。 |
FlushAsync() |
以異步方式清除此數據流的所有緩衝區,並導致任何緩衝的數據寫入基礎裝置。 (繼承來源 Stream) |
FlushAsync(CancellationToken) |
覆寫 FlushAsync(CancellationToken) 方法,以便在指定時取消作業,但不會執行其他動作。 |
FlushAsync(CancellationToken) |
以異步方式清除此數據流的所有緩衝區、導致任何緩衝的數據寫入基礎裝置,並監視取消要求。 (繼承來源 Stream) |
GetHashCode() |
做為預設哈希函式。 (繼承來源 Object) |
GetLifetimeService() |
已淘汰.
擷取控制這個實例存留期原則的目前存留期服務物件。 (繼承來源 MarshalByRefObject) |
GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
Initialize(Byte*, Int64, Int64, FileAccess) |
使用 Unmanaged 記憶體位置的指標,初始化 UnmanagedMemoryStream 類別的新實例。 |
Initialize(SafeBuffer, Int64, Int64, FileAccess) |
使用指定的位移、長度和檔案存取,初始化安全緩衝區中 UnmanagedMemoryStream 類別的新實例。 |
InitializeLifetimeService() |
已淘汰.
取得存留期服務物件,以控制這個實例的存留期原則。 (繼承來源 MarshalByRefObject) |
MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
MemberwiseClone(Boolean) |
建立目前 MarshalByRefObject 對象的淺層複本。 (繼承來源 MarshalByRefObject) |
ObjectInvariant() |
已淘汰.
提供 Contract的支援。 (繼承來源 Stream) |
Read(Byte[], Int32, Int32) |
將指定的位元組數目讀入指定的陣列。 |
Read(Span<Byte>) |
將這個 Unmanaged 記憶體資料流的所有位元組讀入指定的位元組範圍。 |
Read(Span<Byte>) |
在衍生類別中覆寫時,從目前數據流讀取位元組序列,並將數據流中的位置依讀取的位元組數目往前移。 (繼承來源 Stream) |
ReadAsync(Byte[], Int32, Int32) |
以異步方式從目前數據流讀取位元組序列,並依讀取的位元元組數目將數據流中的位置往前移。 (繼承來源 Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
以異步方式將指定的位元組數目讀入指定的陣列。 |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
以異步方式從目前數據流讀取位元組序列、依讀取的位元元組數目將數據流中的位置往前移,並監視取消要求。 (繼承來源 Stream) |
ReadAsync(Memory<Byte>, CancellationToken) |
以異步方式將 Unmanaged 記憶體數據流位元組讀入記憶體區域。 |
ReadAsync(Memory<Byte>, CancellationToken) |
以異步方式從目前數據流讀取位元組序列、依讀取的位元元組數目將數據流中的位置往前移,並監視取消要求。 (繼承來源 Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
從目前數據流讀取至少一個字節數目,並將數據流中的位置依讀取的位元組數目往前移。 (繼承來源 Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
以異步方式從目前數據流讀取至少一個字節數目、依讀取的位元組數目將數據流中的位置往前移,並監視取消要求。 (繼承來源 Stream) |
ReadByte() |
從數據流讀取位元組,並在數據流結尾處將數據流中的位置往前移一個字節,或在數據流結尾傳回 -1。 |
ReadExactly(Byte[], Int32, Int32) |
從目前數據流讀取 |
ReadExactly(Span<Byte>) |
從目前的數據流讀取位元組,並將位置往前移,直到填入 |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
以異步方式從目前數據流讀取 |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
以異步方式從目前數據流讀取位元組、將數據流中的位置往前移,直到填入 |
Seek(Int64, SeekOrigin) |
將目前數據流的目前位置設定為指定的值。 |
SetLength(Int64) |
將數據流的長度設定為指定的值。 |
ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
Write(Byte[], Int32, Int32) |
使用緩衝區中的數據,將位元組區塊寫入目前數據流。 |
Write(ReadOnlySpan<Byte>) |
使用提供的位元組範圍中的數據,將位元組區塊寫入目前非受控記憶體數據流。 |
Write(ReadOnlySpan<Byte>) |
在衍生類別中覆寫時,將位元組序列寫入目前數據流,並依寫入的位元組數目將這個數據流中的目前位置往前移。 (繼承來源 Stream) |
WriteAsync(Byte[], Int32, Int32) |
以異步方式將位元組序列寫入目前數據流,並依寫入的位元元組數目,將這個數據流中的目前位置往前移。 (繼承來源 Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
以異步方式將位元組序列寫入至目前的數據流、依寫入的位元組數目將這個數據流中的目前位置往前移,並監視取消要求。 |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
以異步方式將位元組序列寫入至目前的數據流、依寫入的位元組數目將這個數據流中的目前位置往前移,並監視取消要求。 (繼承來源 Stream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
以異步方式將位元組範圍寫入至目前的數據流、依寫入的位元組數目將這個數據流中的目前位置往前移,並監視取消要求。 |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
以異步方式將位元組序列寫入至目前的數據流、依寫入的位元組數目將這個數據流中的目前位置往前移,並監視取消要求。 (繼承來源 Stream) |
WriteByte(Byte) |
將位元組寫入檔案數據流中的目前位置。 |
擴充方法
CopyToAsync(Stream, PipeWriter, CancellationToken) |
使用取消標記,以異步方式從 Stream 讀取位元組,並將其寫入指定的 PipeWriter。 |
AsInputStream(Stream) |
將適用於 Windows 市集應用程式的 .NET 中的 Managed 資料流轉換為 Windows 執行時間中的輸入資料流。 |
AsOutputStream(Stream) |
將適用於 Windows 市集應用程式的 .NET 中的 Managed 資料流轉換為 Windows 執行時間中的輸出資料流。 |
AsRandomAccessStream(Stream) |
將指定的數據流轉換為隨機存取數據流。 |
ConfigureAwait(IAsyncDisposable, Boolean) |
設定如何執行從異步可處置專案傳回的工作等候。 |
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應