BufferedStream.Read Metoda

Definice

Přetížení

Read(Span<Byte>)

Zkopíruje bajty z aktuálního vyrovnávacího datového proudu do bajtového rozsahu a posune pozici v rámci vyrovnávací paměti datového proudu o počet bajtů přečtených.

Read(Byte[], Int32, Int32)

Zkopíruje bajty z aktuálního streamu do vyrovnávací paměti do pole.

Read(Span<Byte>)

Zkopíruje bajty z aktuálního vyrovnávacího datového proudu do bajtového rozsahu a posune pozici v rámci vyrovnávací paměti datového proudu o počet bajtů přečtených.

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

Parametry

destination
Span<Byte>

Oblast paměti. Když tato metoda vrátí, obsah této oblasti se nahradí bajty načtenými z aktuálního zdroje.

Návraty

Int32

Celkový počet bajtů přečtených do vyrovnávací paměti. To může být menší než počet bajtů přidělených v vyrovnávací paměti, pokud není aktuálně k dispozici mnoho bajtů, nebo nula (0), pokud byl dosažen konec datového proudu.

Poznámky

CanRead Pomocí vlastnosti určete, zda aktuální instance podporuje čtení. Použijte metodu ReadAsync k asynchronnímu čtení z aktuálního datového proudu.

Implementace této metody čtou maximálně bajty z aktuálního buffer.Length datového proudu a ukládají je do buffer. Aktuální pozice v rámci datového proudu je rozšířena počtem bajtů čtení; Pokud ale dojde k výjimce, zůstane aktuální pozice v rámci streamu nezměněná. Implementace vrátí počet načtených bajtů. Implementace se zablokuje, dokud nebude možné číst alespoň jeden bajt dat, v případě, že nejsou k dispozici žádná data. Read vrátí hodnotu 0 pouze v případě, že ve streamu nejsou žádná další data a neočekává se (například uzavřený soket nebo konec souboru). Implementace je bezplatná, aby vrátila méně bajtů, než bylo požadováno, i když nebylo dosaženo konce datového proudu.

Slouží BinaryReader ke čtení primitivních datových typů.

Platí pro

Read(Byte[], Int32, Int32)

Zkopíruje bajty z aktuálního streamu do vyrovnávací paměti do pole.

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

Parametry

arraybuffer
Byte[]

Vyrovnávací paměť, do které se mají kopírovat bajty.

offset
Int32

Odsazení bajtu v vyrovnávací paměti, ve které začnete číst bajty.

count
Int32

Počet bajtů, které se mají číst.

Návraty

Int32

Celkový počet bajtů přečtených do array. To může být menší než počet bajtů požadovaných v případě, že tento počet bajtů není aktuálně k dispozici, nebo 0, pokud byl dosažen konec datového proudu, než se dají číst nějaká data.

Výjimky

array Délka minus offset je menší než count.

array je null.

offset nebo count je negativní.

Stream není otevřený nebo je null.

Stream nepodporuje čtení.

Metody byly volány po zavření datového proudu.

Příklady

Tento příklad kódu je součástí většího příkladu zadaného BufferedStream pro třídu.

// Receive data using the BufferedStream.
Console::WriteLine(  "Receiving data using BufferedStream." );
bytesReceived = 0;
startTime = DateTime::Now;
while ( bytesReceived < numberOfLoops * receivedData->Length )
{
   bytesReceived += bufStream->Read( receivedData, 0, receivedData->Length );
}

bufferedTime = (DateTime::Now - startTime).TotalSeconds;
Console::WriteLine( "{0} bytes received in {1} seconds.\n", bytesReceived.ToString(), bufferedTime.ToString(  "F1" ) );
// Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.");
bytesReceived = 0;
startTime = DateTime.Now;

int numBytesToRead = receivedData.Length;

while (numBytesToRead > 0)
{
    // Read may return anything from 0 to numBytesToRead.
    int n = bufStream.Read(receivedData,0, receivedData.Length);
    // The end of the file is reached.
    if (n == 0)
        break;
    bytesReceived += n;
    numBytesToRead -= n;
}

bufferedTime = (DateTime.Now - startTime).TotalSeconds;
Console.WriteLine("{0} bytes received in {1} seconds.\n",
    bytesReceived.ToString(),
    bufferedTime.ToString("F1"));
// Receive data using the BufferedStream.
printfn "Receiving data using BufferedStream."
bytesReceived <- 0
let startTime = DateTime.Now

let mutable numBytesToRead = receivedData.Length

let mutable broken = false
while not broken && numBytesToRead > 0 do
    // Read may return anything from 0 to numBytesToRead.
    let n = bufStream.Read(receivedData,0, receivedData.Length)
    // The end of the file is reached.
    if n = 0 then
        broken <- true
    else
        bytesReceived <- bytesReceived + n
        numBytesToRead <- numBytesToRead - n

let bufferedTime = (DateTime.Now - startTime).TotalSeconds
printfn $"{bytesReceived} bytes received in {bufferedTime:F1} seconds.\n"
' Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.")
bytesReceived = 0
startTime = DateTime.Now

Dim numBytesToRead As Integer = receivedData.Length
Dim n As Integer
Do While numBytesToRead > 0

    'Read my return anything from 0 to numBytesToRead
    n = bufStream.Read(receivedData, 0, receivedData.Length)
    'The end of the file is reached.
    If n = 0 Then
        Exit Do
    End If

    bytesReceived += n
    numBytesToRead -= n
Loop

bufferedTime = DateTime.Now.Subtract(startTime).TotalSeconds
Console.WriteLine("{0} bytes received in {1} " & _
    "seconds." & vbCrLf, _
    bytesReceived.ToString(), _
    bufferedTime.ToString("F1"))

Poznámky

Metoda Read vrátí hodnotu 0 pouze v případě, že je dosaženo konce datového proudu. Ve všech ostatních případech Read vždy před návratem čte alespoň jeden bajt z datového proudu. Pokud nejsou v datovém proudu při volání Readk dispozici žádná data, Read vrátí metoda hodnotu 0 (konec datového proudu se dosáhne automaticky). Implementace je bezplatná, aby vrátila méně bajtů, než bylo požadováno, i když nebylo dosaženo konce datového proudu.

Slouží BinaryReader ke čtení primitivních datových typů.

Viz také

Platí pro