Teilen über


BufferedStream.Read Methode

Definition

Überlädt

Read(Span<Byte>)

Kopiert Bytes aus dem gepufferten Stream in eine Bytespanne und verschiebt die Position im gepufferten Stream um die Anzahl der gelesenen Bytes.

Read(Byte[], Int32, Int32)

Kopiert Bytes aus dem aktuellen gepufferten Stream in ein Array.

Read(Span<Byte>)

Quelle:
BufferedStream.cs
Quelle:
BufferedStream.cs
Quelle:
BufferedStream.cs

Kopiert Bytes aus dem gepufferten Stream in eine Bytespanne und verschiebt die Position im gepufferten Stream um die Anzahl der gelesenen Bytes.

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

Parameter

destination
Span<Byte>

Ein Bereich im Arbeitsspeicher. Bei der Rückgabe dieser Methode werden die Inhalte dieses Bereichs durch die aus der aktuellen Quelle gelesenen Bytes ersetzt.

Gibt zurück

Die Gesamtanzahl der in den Puffer gelesenen Bytes. Dies kann weniger als die Anzahl der im Puffer zugeordneten Bytes sein, wenn diese Anzahl an Bytes derzeit nicht verfügbar ist, oder 0 (null), wenn das Ende des Streams erreicht ist.

Hinweise

Verwenden Sie die CanRead -Eigenschaft, um zu bestimmen, ob der aktuelle instance Lesevorgänge unterstützt. Verwenden Sie die ReadAsync -Methode, um asynchron aus dem aktuellen Stream zu lesen.

Implementierungen dieser Methode lesen maximal buffer.Length Bytes aus dem aktuellen Stream und speichern sie in buffer. Die aktuelle Position im Stream wird um die Anzahl der gelesenen Bytes erweitert. Wenn jedoch eine Ausnahme auftritt, bleibt die aktuelle Position im Stream unverändert. Implementierungen geben die Anzahl der gelesenen Bytes zurück. Die Implementierung wird blockiert, bis mindestens ein Byte von Daten gelesen werden kann, falls keine Daten verfügbar sind. Read gibt nur 0 zurück, wenn keine daten mehr im Stream vorhanden sind und keine weiteren (z. B. ein geschlossener Socket oder ein Dateiende) erwartet werden. Eine Implementierung kann auch dann weniger Bytes als angefordert zurückgeben, wenn das Ende des Datenstroms nicht erreicht wurde.

Verwenden Sie BinaryReader zum Lesen primitiver Datentypen.

Gilt für:

Read(Byte[], Int32, Int32)

Quelle:
BufferedStream.cs
Quelle:
BufferedStream.cs
Quelle:
BufferedStream.cs

Kopiert Bytes aus dem aktuellen gepufferten Stream in ein Array.

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

Parameter

arraybuffer
Byte[]

Der Puffer, in den Bytes kopiert werden sollen.

offset
Int32

Der Byteoffset im Puffer, ab dem mit dem Lesen von Bytes begonnen werden soll.

count
Int32

Die Anzahl der zu lesenden Bytes.

Gibt zurück

Die Anzahl der insgesamt in das array gelesenen Bytes. Diese kann kleiner sein als die Anzahl der angeforderten Bytes, wenn derzeit nicht entsprechend viele Bytes verfügbar sind, oder 0, wenn das Ende des Streams erreicht ist, bevor Daten gelesen werden können.

Ausnahmen

Die Länge von array minus offset ist kleiner als count.

array ist null.

offset oder count ist ein negativer Wert.

Der Stream ist nicht geöffnet oder ist null.

Lesevorgänge werden vom Stream nicht unterstützt.

Es wurden Methoden aufgerufen, nachdem der Stream geschlossen wurde.

Beispiele

Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die BufferedStream-Klasse bereitgestellt wird.

// 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"))

Hinweise

Die Read -Methode gibt nur dann 0 zurück, wenn das Ende des Datenstroms erreicht ist. In allen anderen Fällen Read liest vor der Rückgabe immer mindestens ein Byte aus dem Stream. Wenn bei einem Aufruf Readvon per Definition keine Daten aus dem Stream verfügbar sind, gibt die Read Methode 0 zurück (das Ende des Datenstroms wird automatisch erreicht). Eine Implementierung kann auch dann weniger Bytes als angefordert zurückgeben, wenn das Ende des Datenstroms nicht erreicht wurde.

Verwenden Sie BinaryReader zum Lesen primitiver Datentypen.

Weitere Informationen

Gilt für: