UnmanagedMemoryStream.Read Metódus

Definíció

Túlterhelések

Name Description
Read(Span<Byte>)

A nem felügyelt memóriafolyam összes bájtját beolvassa a megadott bájttartományba.

Read(Byte[], Int32, Int32)

Beolvassa a megadott számú bájtot a megadott tömbbe.

Read(Span<Byte>)

A nem felügyelt memóriafolyam összes bájtját beolvassa a megadott bájttartományba.

public:
 override int Read(Span<System::Byte> destination);
public override int Read(Span<byte> destination);
override this.Read : Span<byte> -> int
Public Overrides Function Read (destination As Span(Of Byte)) As Integer

Paraméterek

destinationbuffer
Span<Byte>

Amikor ez a metódus visszatér, ez a span a nem felügyelt memóriafolyam összes bájtját tartalmazza.

Válaszok

A célba beolvasott bájtok teljes száma.

A következőre érvényes:

Read(Byte[], Int32, Int32)

Beolvassa a megadott számú bájtot a megadott tömbbe.

public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read(byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Paraméterek

buffer
Byte[]

A metódus visszatérésekor a megadott bájttömb az aktuális forrásból beolvasott bájtok között offset és (- 1) között és (offset + count - 1) helyett szerepel. Ez a paraméter nem inicializálva lesz átadva.

offset
Int32

A nullaalapú bájteltolás buffer , amelyben az aktuális adatfolyamból beolvasott adatok tárolása megkezdhető.

count
Int32

Az aktuális streamből beolvasandó bájtok maximális száma.

Válaszok

A pufferbe beolvasott bájtok teljes száma. Ez kisebb lehet, mint a kért bájtok száma, ha a sok bájt jelenleg nem érhető el, vagy nulla (0), ha elérte a stream végét.

Kivételek

A stream bezárult.

A mögöttes memória nem támogatja az olvasást.

-vagy-

A CanRead tulajdonság be van állítva false-re.

A buffer paraméter a következőre nullvan állítva: .

A offset paraméter kisebb, mint nulla.

-vagy-

A count paraméter kisebb, mint nulla.

A puffertömb hossza mínusz a offset paraméter kisebb, mint a count paraméter.

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

A offset paraméter megadja annak a paraméternek (a pufferindexnek) a array bájtjának eltolását, amelynél az olvasás elkezdhető, a count paraméter pedig a streamből beolvasandó bájtok maximális számát adja meg. A visszaadott érték az olvasási bájtok tényleges száma, vagy nulla, ha a stream vége el van érve. Ha az olvasási művelet sikeres, a stream aktuális pozícióját az olvasási bájtok száma határozza meg. Kivétel esetén a stream jelenlegi pozíciója nem változik.

A Read metódus csak a stream végének elérése után ad vissza nullát. Read Ellenkező esetben a visszatérés előtt mindig beolvassa a streamből legalább egy bájtot. Ha a híváskor Readnem áll rendelkezésre adat a streamből, a metódus blokkolni fogja, amíg legalább egy bájtnyi adatot vissza nem ad. Az implementációk a kértnél kevesebb bájtot adnak vissza, még akkor is, ha a stream vége még nem ért el.

A következőre érvényes: