UnmanagedMemoryStream Costruttori
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Inizializza una nuova istanza della classe UnmanagedMemoryStream.
Overload
UnmanagedMemoryStream() |
Inizializza una nuova istanza della classe UnmanagedMemoryStream. |
UnmanagedMemoryStream(Byte*, Int64) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream utilizzando il percorso e la lunghezza di memoria specificati. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro con un offset e una lunghezza specificati. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream utilizzando il percorso, la lunghezza della memoria, la quantità totale di memoria e i valori di accesso ai file specificati. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro con un offset, una lunghezza e un accesso ai file specificati. |
UnmanagedMemoryStream()
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
Inizializza una nuova istanza della classe UnmanagedMemoryStream.
protected:
UnmanagedMemoryStream();
protected UnmanagedMemoryStream ();
Protected Sub New ()
Eccezioni
L'utente non dispone dell'autorizzazione richiesta.
Si applica a
UnmanagedMemoryStream(Byte*, Int64)
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
Importante
Questa API non è conforme a CLS.
Inizializza una nuova istanza della classe UnmanagedMemoryStream utilizzando il percorso e la lunghezza di memoria specificati.
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
Parametri
- pointer
- Byte*
Puntatore a una posizione di memoria non gestita.
- length
- Int64
Lunghezza della memoria da utilizzare.
- Attributi
Eccezioni
L'utente non dispone dell'autorizzazione richiesta.
Il valore pointer
è null
.
Il valore length
è minore di zero.
-o-
Il length
è sufficientemente grande da causare un overflow.
Esempio
Nell'esempio di codice seguente viene illustrato come leggere e scrivere in memoria non gestita usando la classe UnmanagedMemoryStream. Un blocco di memoria non gestita viene allocato e de-allocato usando la classe 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.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));
}
}
Commenti
Questo costruttore crea una nuova istanza della classe UnmanagedMemoryStream e per impostazione predefinita imposta la proprietà CanWrite su false
e la proprietà CanRead su true
. La proprietà Length è impostata sul valore del parametro length
e non può essere modificata.
Si applica a
UnmanagedMemoryStream(SafeBuffer, Int64, Int64)
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro con un offset e una lunghezza specificati.
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)
Parametri
- buffer
- SafeBuffer
Buffer in cui contenere il flusso di memoria non gestito.
- offset
- Int64
Posizione dei byte nel buffer in cui avviare il flusso di memoria non gestito.
- length
- Int64
Lunghezza del flusso di memoria non gestita.
Si applica a
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
Importante
Questa API non è conforme a CLS.
Inizializza una nuova istanza della classe UnmanagedMemoryStream utilizzando il percorso, la lunghezza della memoria, la quantità totale di memoria e i valori di accesso ai file specificati.
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
Parametri
- pointer
- Byte*
Puntatore a una posizione di memoria non gestita.
- length
- Int64
Lunghezza della memoria da utilizzare.
- capacity
- Int64
Quantità totale di memoria assegnata al flusso.
- access
- FileAccess
Uno dei valori di FileAccess.
- Attributi
Eccezioni
L'utente non dispone dell'autorizzazione richiesta.
Il valore pointer
è null
.
Il valore length
è minore di zero.
-o-
Il valore capacity
è minore di zero.
-o-
Il valore length
è maggiore del valore capacity
.
Esempio
Nell'esempio di codice seguente viene illustrato come leggere e scrivere in memoria non gestita usando la classe UnmanagedMemoryStream. Un blocco di memoria non gestita viene allocato e de-allocato usando la classe 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();
}
}
Commenti
Il parametro length
definisce la quantità corrente di memoria in uso. Se la lettura o l'aggiunta di dati al flusso, il valore length
deve essere uguale alla quantità di dati validi nel flusso da leggere o conservare. Se si scrive nel flusso, questo valore deve essere zero.
Il parametro capacity
indica la quantità di memoria totale disponibile. Questo valore può descrivere un'area più lunga della lunghezza specificata oppure indicare un'area a cui è possibile accodare. Qualsiasi tentativo di scrittura oltre questo valore avrà esito negativo.
Il parametro access
imposta le proprietà CanReade CanWrite. Si noti che la specifica di Write non garantisce che il flusso sia scrivibile. I parametri di accesso consentono all'implementatore di creare un oggetto la cui implementazione può corrispondere al flusso effettivo esposto.
Si applica a
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
- Origine:
- UnmanagedMemoryStream.cs
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro con un offset, una lunghezza e un accesso ai file specificati.
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)
Parametri
- buffer
- SafeBuffer
Buffer in cui contenere il flusso di memoria non gestito.
- offset
- Int64
Posizione dei byte nel buffer in cui avviare il flusso di memoria non gestito.
- length
- Int64
Lunghezza del flusso di memoria non gestita.
- access
- FileAccess
Modalità di accesso ai file al flusso di memoria non gestita.