UnmanagedMemoryStream Konstruktory
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Inicjuje nowe wystąpienie klasy UnmanagedMemoryStream.
Przeciążenia
UnmanagedMemoryStream() |
Inicjuje nowe wystąpienie klasy UnmanagedMemoryStream. |
UnmanagedMemoryStream(Byte*, Int64) |
Inicjuje UnmanagedMemoryStream nowe wystąpienie klasy przy użyciu określonej lokalizacji i długości pamięci. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Inicjuje nowe wystąpienie UnmanagedMemoryStream klasy w bezpiecznym buforze z określonym przesunięciem i długością. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inicjuje UnmanagedMemoryStream nowe wystąpienie klasy przy użyciu określonej lokalizacji, długości pamięci, całkowitej ilości pamięci i wartości dostępu do plików. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inicjuje nowe wystąpienie UnmanagedMemoryStream klasy w bezpiecznym buforze z określonym przesunięciem, długością i dostępem do plików. |
UnmanagedMemoryStream()
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
Inicjuje nowe wystąpienie klasy UnmanagedMemoryStream.
protected:
UnmanagedMemoryStream();
protected UnmanagedMemoryStream ();
Protected Sub New ()
Wyjątki
Użytkownik nie ma wymaganych uprawnień.
Dotyczy
UnmanagedMemoryStream(Byte*, Int64)
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
Ważne
Ten interfejs API nie jest zgodny ze specyfikacją CLS.
Inicjuje UnmanagedMemoryStream nowe wystąpienie klasy przy użyciu określonej lokalizacji i długości pamięci.
public:
UnmanagedMemoryStream(System::Byte* pointer, long length);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public UnmanagedMemoryStream (byte* pointer, long length);
[System.CLSCompliant(false)]
public UnmanagedMemoryStream (byte* pointer, long length);
public UnmanagedMemoryStream (byte* pointer, long length);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
[<System.CLSCompliant(false)>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
Parametry
- pointer
- Byte*
Wskaźnik do niezarządzanej lokalizacji pamięci.
- length
- Int64
Długość pamięci do użycia.
- Atrybuty
Wyjątki
Użytkownik nie ma wymaganych uprawnień.
Wartość elementu pointer
to null
.
Wartość length
jest mniejsza niż zero.
-lub-
Jest length
wystarczająco duży, aby spowodować przepełnienie.
Przykłady
W poniższym przykładzie kodu pokazano, jak odczytywać dane z pamięci niezarządzanej i zapisywać je przy użyciu UnmanagedMemoryStream klasy . Blok niezarządzanej pamięci jest przydzielany i delokowany przy użyciu Marshal klasy .
// 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.Runtime.InteropServices;
using System.Text;
unsafe class Program
{
static void Main()
{
// Create some data to write.
byte[] text = UnicodeEncoding.Unicode.GetBytes("Data to write.");
// Allocate a block of unmanaged memory.
IntPtr memIntPtr = Marshal.AllocHGlobal(text.Length);
// Get a byte pointer from the unmanaged memory block.
byte* memBytePtr = (byte*)memIntPtr.ToPointer();
UnmanagedMemoryStream writeStream =
new UnmanagedMemoryStream(
memBytePtr, text.Length, text.Length, FileAccess.Write);
// Write the data.
WriteToStream(writeStream, text);
// Close the stream.
writeStream.Close();
// Create another UnmanagedMemoryStream for reading.
UnmanagedMemoryStream readStream =
new UnmanagedMemoryStream(memBytePtr, text.Length);
// Display the contents of the stream to the console.
PrintStream(readStream);
// Close the reading stream.
readStream.Close();
// Free up the unmanaged memory.
Marshal.FreeHGlobal(memIntPtr);
}
public static void WriteToStream(UnmanagedMemoryStream writeStream, byte[] text)
{
// Verify that the stream is writable:
// By default, UnmanagedMemoryStream objects do not have write access,
// write access must be set explicitly.
if (writeStream.CanWrite)
{
// Write the data, byte by byte
for (int i = 0; i < writeStream.Length; i++)
{
writeStream.WriteByte(text[i]);
}
}
}
public static void PrintStream(UnmanagedMemoryStream readStream)
{
byte[] text = new byte[readStream.Length];
// Verify that the stream is writable:
// By default, UnmanagedMemoryStream objects do not have write access,
// write access must be set explicitly.
if (readStream.CanRead)
{
// Write the data, byte by byte
for (int i = 0; i < readStream.Length; i++)
{
text[i] = (byte)readStream.ReadByte();
}
}
Console.WriteLine(UnicodeEncoding.Unicode.GetString(text));
}
}
Uwagi
Ten konstruktor tworzy nowe wystąpienie UnmanagedMemoryStream klasy, a domyślnie ustawia CanWrite właściwość na false
i CanRead właściwość na true
. Właściwość Length jest ustawiona na wartość parametru length
i nie można jej zmienić.
Dotyczy
UnmanagedMemoryStream(SafeBuffer, Int64, Int64)
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
Inicjuje nowe wystąpienie UnmanagedMemoryStream klasy w bezpiecznym buforze z określonym przesunięciem i długością.
public:
UnmanagedMemoryStream(System::Runtime::InteropServices::SafeBuffer ^ buffer, long offset, long length);
public UnmanagedMemoryStream (System.Runtime.InteropServices.SafeBuffer buffer, long offset, long length);
new System.IO.UnmanagedMemoryStream : System.Runtime.InteropServices.SafeBuffer * int64 * int64 -> System.IO.UnmanagedMemoryStream
Public Sub New (buffer As SafeBuffer, offset As Long, length As Long)
Parametry
- buffer
- SafeBuffer
Bufor zawierający niezarządzany strumień pamięci.
- offset
- Int64
Pozycja bajtów w buforze, na którym ma zostać uruchomiony niezarządzany strumień pamięci.
- length
- Int64
Długość niezarządzanego strumienia pamięci.
Dotyczy
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
Ważne
Ten interfejs API nie jest zgodny ze specyfikacją CLS.
Inicjuje UnmanagedMemoryStream nowe wystąpienie klasy przy użyciu określonej lokalizacji, długości pamięci, całkowitej ilości pamięci i wartości dostępu do plików.
public:
UnmanagedMemoryStream(System::Byte* pointer, long length, long capacity, System::IO::FileAccess access);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public UnmanagedMemoryStream (byte* pointer, long length, long capacity, System.IO.FileAccess access);
[System.CLSCompliant(false)]
public UnmanagedMemoryStream (byte* pointer, long length, long capacity, System.IO.FileAccess access);
public UnmanagedMemoryStream (byte* pointer, long length, long capacity, System.IO.FileAccess access);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
[<System.CLSCompliant(false)>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
Parametry
- pointer
- Byte*
Wskaźnik do niezarządzanej lokalizacji pamięci.
- length
- Int64
Długość pamięci do użycia.
- capacity
- Int64
Całkowita ilość pamięci przypisanej do strumienia.
- access
- FileAccess
Jedna z FileAccess wartości.
- Atrybuty
Wyjątki
Użytkownik nie ma wymaganych uprawnień.
Wartość elementu pointer
to null
.
Wartość length
jest mniejsza niż zero.
-lub-
Wartość capacity
jest mniejsza niż zero.
-lub-
Wartość length
jest większa niż capacity
wartość.
Przykłady
W poniższym przykładzie kodu pokazano, jak odczytywać dane z pamięci niezarządzanej i zapisywać je przy użyciu UnmanagedMemoryStream klasy . Blok niezarządzanej pamięci jest przydzielany i delokowany przy użyciu Marshal klasy .
// 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();
}
}
Uwagi
Parametr length
definiuje bieżącą ilość używanej pamięci. W przypadku odczytywania lub dołączania danych do strumienia length
wartość powinna być równa ilości prawidłowych danych w strumieniu do odczytu lub zachowania. W przypadku zapisywania w strumieniu ta wartość powinna być równa zero.
Parametr capacity
wskazuje łączną ilość dostępnej pamięci. Ta wartość może opisać region, który jest dłuższy niż określona długość, lub wskazać region, do którego można dołączyć. Każda próba zapisania poza tą wartością zakończy się niepowodzeniem.
Parametr access
ustawia CanReadwłaściwości i CanWrite . Należy pamiętać, że określenie Write nie gwarantuje, że strumień będzie zapisywalny. Parametry dostępu umożliwiają implementatorowi utworzenie obiektu, którego implementacja może być zgodna z rzeczywistym strumieniem, który jest uwidoczniony.
Dotyczy
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
Inicjuje nowe wystąpienie UnmanagedMemoryStream klasy w bezpiecznym buforze z określonym przesunięciem, długością i dostępem do plików.
public:
UnmanagedMemoryStream(System::Runtime::InteropServices::SafeBuffer ^ buffer, long offset, long length, System::IO::FileAccess access);
public UnmanagedMemoryStream (System.Runtime.InteropServices.SafeBuffer buffer, long offset, long length, System.IO.FileAccess access);
new System.IO.UnmanagedMemoryStream : System.Runtime.InteropServices.SafeBuffer * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
Public Sub New (buffer As SafeBuffer, offset As Long, length As Long, access As FileAccess)
Parametry
- buffer
- SafeBuffer
Bufor zawierający niezarządzany strumień pamięci.
- offset
- Int64
Pozycja bajtów w buforze, na którym ma zostać uruchomiony niezarządzany strumień pamięci.
- length
- Int64
Długość niezarządzanego strumienia pamięci.
- access
- FileAccess
Tryb dostępu do pliku do niezarządzanego strumienia pamięci.