Freigeben über


Stream.Read-Methode

Liest beim Überschreiben in einer abgeleiteten Klasse eine Folge von Bytes aus dem aktuellen Stream und erhöht die Position im Stream um die Anzahl der gelesenen Bytes.

Namespace: System.IO
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public MustOverride Function Read ( _
    <InAttribute> <OutAttribute> buffer As Byte(), _
    offset As Integer, _
    count As Integer _
) As Integer
'Usage
Dim instance As Stream
Dim buffer As Byte()
Dim offset As Integer
Dim count As Integer
Dim returnValue As Integer

returnValue = instance.Read(buffer, offset, count)
public abstract int Read (
    [InAttribute] [OutAttribute] byte[] buffer,
    int offset,
    int count
)
public:
virtual int Read (
    [InAttribute] [OutAttribute] array<unsigned char>^ buffer, 
    int offset, 
    int count
) abstract
public abstract int Read (
    /** @attribute InAttribute() */ /** @attribute OutAttribute() */ byte[] buffer, 
    int offset, 
    int count
)
public abstract function Read (
    buffer : byte[], 
    offset : int, 
    count : int
) : int

Parameter

  • buffer
    Ein Bytearray. Nach dem Beenden dieser Methode enthält der Puffer das angegebene Bytearray mit den Werten zwischen offset und (offset + count - 1), die durch aus der aktuellen Quelle gelesene Bytes ersetzt wurden.
  • offset
    Der nullbasierte Byteoffset im buffer, ab dem die aus dem aktuellen Stream gelesenen Daten gespeichert werden.
  • count
    Die maximale Anzahl an Bytes, die aus dem aktuellen Stream gelesen werden sollen.

Rückgabewert

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

Ausnahmen

Ausnahmetyp Bedingung

ArgumentException

Die Summe aus offset und count ist größer als die Pufferlänge.

ArgumentNullException

buffer ist NULL (Nothing in Visual Basic).

ArgumentOutOfRangeException

offset oder count ist negativ.

IOException

Ein E/A-Fehler tritt auf.

NotSupportedException

Der Stream unterstützt keine Lesevorgänge.

ObjectDisposedException

Es wurden Methoden aufgerufen, nachdem der Stream geschlossen wurde.

Hinweise

Ein Beispiel für das Erstellen einer Datei und das Schreiben von Text in eine Datei finden Sie unter Gewusst wie: Schreiben von Text in eine Datei. Ein Beispiel für das Lesen von Text aus einer Datei finden Sie unter Gewusst wie: Lesen aus einer Textdatei. Ein Beispiel für das Lesen aus einer Binärdatei und das Schreiben in eine Binärdatei finden Sie unter Gewusst wie: Lesen und Schreiben einer neu erstellten Datendatei.

Verwenden Sie die CanRead-Eigenschaft, um zu bestimmen, ob die aktuelle Instanz Lesevorgänge unterstützt.

Die Implementierungen dieser Methode lesen maximal count Bytes aus dem aktuellen Stream und speichern diese beginnend bei offset im buffer. Die aktuelle Position im Stream wird um die Anzahl der gelesenen Bytes nach vorne verschoben. Wenn eine Ausnahme auftritt, wird die Position im Stream jedoch nicht geändert. Die Implementierungen geben die Anzahl der gelesenen Bytes zurück. Der Rückgabewert ist nur dann null, wenn die aktuelle Position das Ende des Streams ist. Die Implementierungen blockieren, bis mindestens ein Byte mit Daten gelesen werden kann, wenn keine Daten verfügbar sind. Read gibt nur dann 0 zurück, wenn sich keine Daten im Stream befinden und auch keine weiteren Daten erwartet werden (beispielsweise bei einem geschlossenen Socket oder dem Ende der Datei). Eine Implementierung kann weniger Bytes als angefordert zurückgeben, auch wenn noch nicht das Ende des Streams erreicht ist.

Verwenden Sie BinaryReader für das Lesen primitiver Datentypen.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie mithilfe von Read ein Datenblock gelesen wird.

Imports System
Imports System.IO
Imports Microsoft.VisualBasic

Public Class Block

    Public Shared Sub Main()
        Dim s As New MemoryStream()
        Dim i As Integer
        For i = 0 To 99
            s.WriteByte(CByte(i))
        Next i
        s.Position = 0

        ' Now read in s into a byte buffer.
        Dim bytes(s.Length) As Byte
        Dim numBytesToRead As Integer = CInt(s.Length)
        Dim numBytesRead As Integer = 0
        While numBytesToRead > 0
            ' Read can return anything from 0 to numBytesToRead.
            Dim n As Integer = s.Read(bytes, numBytesRead, numBytesToRead)
            ' The end of the file has been reached.
            If n = 0 Then
                Exit While
            End If
            numBytesRead += n
            numBytesToRead -= n
        End While
        s.Close()
        ' numBytesToRead should be 0 now, and numBytesRead should
        ' equal 100.
        Console.WriteLine("number of bytes read: " & numBytesRead.ToString())
    End Sub
End Class
using System;
using System.IO;

public class Block
{
    public static void Main()
    {
        Stream s = new MemoryStream();
        for (int i=0; i<100; i++)
            s.WriteByte((byte)i);
        s.Position = 0;
 
        // Now read s into a byte buffer.
        byte[] bytes = new byte[s.Length];
        int numBytesToRead = (int) s.Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0) 
        {
            // Read may return anything from 0 to numBytesToRead.
            int n = s.Read(bytes, numBytesRead, numBytesToRead);
            // The end of the file is reached.
            if (n==0)
                break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        s.Close();
        // numBytesToRead should be 0 now, and numBytesRead should
        // equal 100.
        Console.WriteLine("number of bytes read: "+numBytesRead);
    }
}
using namespace System;
using namespace System::IO;
int main()
{
   Stream^ s = gcnew MemoryStream;
   for ( int i = 0; i < 100; i++ )
      s->WriteByte( (Byte)i );
   s->Position = 0;
   
   // Now read s into a byte buffer.
   array<Byte>^bytes = gcnew array<Byte>(s->Length);
   int numBytesToRead = (int)s->Length;
   int numBytesRead = 0;
   while ( numBytesToRead > 0 )
   {
      
      // Read may return anything from 0 to numBytesToRead.
      int n = s->Read( bytes, numBytesRead, numBytesToRead );
      
      // The end of the file is reached.
      if ( n == 0 )
            break;

      numBytesRead += n;
      numBytesToRead -= n;
   }

   s->Close();
   
   // numBytesToRead should be 0 now, and numBytesRead should
   // equal 100.
   Console::WriteLine( "number of bytes read: {0}", numBytesRead );
}

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

Stream-Klasse
Stream-Member
System.IO-Namespace

Weitere Ressourcen

Datei- und Stream-E/A
Gewusst wie: Lesen aus einer Textdatei
Gewusst wie: Schreiben von Text in eine Datei