UnmanagedMemoryStream.Write Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Túlterhelések
| Name | Description |
|---|---|
| Write(ReadOnlySpan<Byte>) |
Bájtblokkot ír az aktuális nem felügyelt memóriafolyamba a megadott bájttartományból származó adatok használatával. |
| Write(Byte[], Int32, Int32) |
Bájtblokkot ír az aktuális adatfolyamba egy pufferből származó adatokkal. |
Write(ReadOnlySpan<Byte>)
Bájtblokkot ír az aktuális nem felügyelt memóriafolyamba a megadott bájttartományból származó adatok használatával.
public:
override void Write(ReadOnlySpan<System::Byte> source);
public override void Write(ReadOnlySpan<byte> source);
override this.Write : ReadOnlySpan<byte> -> unit
Public Overrides Sub Write (source As ReadOnlySpan(Of Byte))
Paraméterek
- sourcebuffer
- ReadOnlySpan<Byte>
Az a bájtok száma, amelyekből a bájtokat át szeretné másolni az aktuális nem felügyelt memóriafolyamba.
A következőre érvényes:
Write(Byte[], Int32, Int32)
Bájtblokkot ír az aktuális adatfolyamba egy pufferből származó adatokkal.
public:
override void Write(cli::array <System::Byte> ^ buffer, int offset, int count);
public override void Write(byte[] buffer, int offset, int count);
override this.Write : byte[] * int * int -> unit
Public Overrides Sub Write (buffer As Byte(), offset As Integer, count As Integer)
Paraméterek
- buffer
- Byte[]
Az a bájttömb, amelyből bájtokat szeretne átmásolni az aktuális adatfolyamba.
- offset
- Int32
A puffer eltolása, amelynél a bájtok az aktuális streambe való másolását megkezdik.
- count
- Int32
Az aktuális streambe írandó bájtok száma.
Kivételek
A stream bezárult.
A mögöttes memória nem támogatja az írást.
-vagy-
A rendszer megkísérli az írást a streambe, és a CanWrite tulajdonság az false.
-vagy-
Az count érték nagyobb, mint a stream kapacitása.
-vagy-
A pozíció a streamkapacitás végén van.
I/O-hiba történik.
Az egyik megadott paraméter kisebb, mint nulla.
A offset paraméter mínusz a buffer paraméter hossza kisebb, mint a count paraméter.
A buffer paraméter a következő null: .
Példák
Az alábbi példakód bemutatja, hogyan lehet olvasni és írni a nem felügyelt memóriába az UnmanagedMemoryStream osztály használatával. A nem felügyelt memória blokkja az osztály használatával Marshal lesz lefoglalva és felszabadítva.
// 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();
}
}
Megjegyzések
Az írás a stream aktuális helyén történik.