BufferedStream.Read Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ü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>)
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
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 ermitteln, ob die aktuelle Instanz das Lesen unterstützt. Verwenden Sie die ReadAsync Methode, um asynchron aus dem aktuellen Datenstrom zu lesen.
Implementierungen dieser Methode lesen maximal buffer.Length
Bytes aus dem aktuellen Datenstrom und speichern sie in buffer
. Die aktuelle Position innerhalb des Datenstroms wird durch die Anzahl der Bytes erweitert, die gelesen werden; Wenn jedoch eine Ausnahme auftritt, bleibt die aktuelle Position innerhalb des Datenstroms unverändert. Implementierungen geben die Anzahl der Bytes zurück, die gelesen werden. Die Implementierung wird blockiert, bis mindestens ein Byte von Daten gelesen werden kann, wenn keine Daten verfügbar sind. Read
gibt nur 0 zurück, wenn im Datenstrom keine weiteren Daten vorhanden sind und keine weiteren Daten erwartet werden (z. B. ein geschlossener Socket oder ein Ende der Datei). Eine Implementierung ist frei, weniger Bytes zurückzugeben als angefordert, auch wenn das Ende des Datenstroms nicht erreicht wurde.
Wird zum Lesen primitiver Datentypen verwendet BinaryReader .
Gilt für
Read(Byte[], Int32, Int32)
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 0 zurück, wenn das Ende des Datenstroms erreicht ist. In allen anderen Fällen Read
liest man immer mindestens ein Byte aus dem Datenstrom vor der Rückgabe. Wenn bei einem Aufruf Read
keine Daten aus dem Datenstrom verfügbar sind, gibt die Read
Methode 0 zurück (das Ende des Datenstroms wird automatisch erreicht). Eine Implementierung ist frei, weniger Bytes zurückzugeben als angefordert, auch wenn das Ende des Datenstroms nicht erreicht wurde.
Wird zum Lesen primitiver Datentypen verwendet BinaryReader .
Siehe auch
- BlockCopy(Array, Int32, Array, Int32, Int32)
- CanRead
- Write(Byte[], Int32, Int32)
- Datei- und Stream-E/A
- Vorgehensweise: Lesen von Text aus einer Datei
- Vorgehensweise: Schreiben von Text in eine Datei