Partager via


Stream.Read Méthode

Définition

Surcharges

Read(Span<Byte>)

En cas de remplacement dans une classe dérivée, lit une séquence d'octets dans le flux actuel et avance la position dans le flux du nombre d'octets lus.

Read(Byte[], Int32, Int32)

En cas de remplacement dans une classe dérivée, lit une séquence d'octets dans le flux actuel et avance la position dans le flux du nombre d'octets lus.

Read(Span<Byte>)

Source:
Stream.cs
Source:
Stream.cs
Source:
Stream.cs

En cas de remplacement dans une classe dérivée, lit une séquence d'octets dans le flux actuel et avance la position dans le flux du nombre d'octets lus.

public:
 virtual int Read(Span<System::Byte> buffer);
public virtual int Read (Span<byte> buffer);
abstract member Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overridable Function Read (buffer As Span(Of Byte)) As Integer

Paramètres

buffer
Span<Byte>

Région de la mémoire. Quand cette méthode est retournée, le contenu de cette région est remplacé par les octets lus dans la source actuelle.

Retours

Nombre total d'octets lus dans la mémoire tampon. Cela peut être inférieur à la taille de la mémoire tampon si ce nombre d’octets ne sont pas disponibles actuellement, ou zéro (0) si la longueur de la mémoire tampon est égale à zéro ou que la fin du flux a été atteinte.

Remarques

Utilisez la CanRead propriété pour déterminer si le instance actuel prend en charge la lecture. Utilisez la ReadAsync méthode pour lire de manière asynchrone à partir du flux actuel.

Les implémentations de cette méthode lisent un maximum d’octets buffer.Length du flux actuel et les stockent dans buffer. La position actuelle dans le flux est avancée par le nombre d’octets lus ; Toutefois, si une exception se produit, la position actuelle dans le flux reste inchangée. Les implémentations retournent le nombre d’octets lus. Si plus de zéro octet est demandé, l’implémentation ne termine pas l’opération tant qu’au moins un octet de données ne peut pas être lu (si zéro octet a été demandé, certaines implémentations peuvent également ne pas se terminer tant qu’au moins un octet n’est pas disponible, mais aucune donnée ne sera consommée à partir du flux dans ce cas). Read retourne 0 uniquement si zéro octet a été demandé ou lorsqu’il n’y a plus de données dans le flux et qu’aucun autre élément n’est attendu (par exemple, un socket fermé ou la fin du fichier). Une implémentation est libre de retourner moins d’octets que demandé même si la fin du flux n’a pas été atteinte.

À utiliser BinaryReader pour lire les types de données primitifs.

S’applique à

Read(Byte[], Int32, Int32)

Source:
Stream.cs
Source:
Stream.cs
Source:
Stream.cs

En cas de remplacement dans une classe dérivée, lit une séquence d'octets dans le flux actuel et avance la position dans le flux du nombre d'octets lus.

public:
 abstract int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public abstract int Read (byte[] buffer, int offset, int count);
abstract member Read : byte[] * int * int -> int
Public MustOverride Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Paramètres

buffer
Byte[]

Tableau d'octets. Quand cette méthode se termine, la mémoire tampon contient le tableau d’octets spécifié dont les valeurs comprises entre offset et (offset + count - 1) sont remplacées par les octets lus dans la source actuelle.

offset
Int32

Dans buffer, décalage d'octet de base zéro auquel commencer le stockage des données lues dans le flux actuel.

count
Int32

Nombre maximal d'octets à lire dans le flux actuel.

Retours

Nombre total d'octets lus dans la mémoire tampon. Cela peut être inférieur au nombre d’octets demandés si ce nombre d’octets ne sont pas disponibles actuellement, ou zéro (0) si count est 0 ou si la fin du flux a été atteinte.

Exceptions

La somme de offset et count est supérieure à la longueur de la mémoire tampon.

buffer a la valeur null.

offset ou count est un nombre négatif.

Une erreur d’E/S se produit.

Le flux ne prend pas en charge la lecture.

Des méthodes ont été appelées après la fermeture du flux.

Exemples

L’exemple suivant montre comment utiliser Read pour lire un bloc de données.

using namespace System;
using namespace System::IO;

public ref class Block
{
public:
    static void 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 10.
            int n = s->Read(bytes, numBytesRead, 10);
            // 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:d}", numBytesRead);
    }
};

int main()
{
    Block::Main();
}
using System;
using System.IO;

public class Block
{
    public static void Main()
    {
        Stream s = new MemoryStream();
        for (int i = 0; i < 122; i++)
        {
            s.WriteByte((byte)i);
        }
        s.Position = 0;

        // Now read s into a byte buffer with a little padding.
        byte[] bytes = new byte[s.Length + 10];
        int numBytesToRead = (int)s.Length;
        int numBytesRead = 0;
        do
        {
            // Read may return anything from 0 to 10.
            int n = s.Read(bytes, numBytesRead, 10);
            numBytesRead += n;
            numBytesToRead -= n;
        } while (numBytesToRead > 0);
        s.Close();

        Console.WriteLine("number of bytes read: {0:d}", numBytesRead);
    }
}
Imports System.IO

Public Class Block
    Public Shared Sub Main()
        Dim s As Stream = New MemoryStream()
        For i As Integer = 0 To 121
            s.WriteByte(CType(i, Byte))
        Next i
        s.Position = 0

        ' Now read s into a byte buffer that is padded slightly.
        Dim bytes(s.Length + 10) As Byte
        Dim numBytesToRead As Integer = s.Length
        Dim numBytesRead As Integer = 0
        Dim n As Integer
        Do
            ' Read may return anything from 0 to 10.
            n = s.Read(bytes, numBytesRead, 10)
            ' The end of the file is reached.
            numBytesRead += n
            numBytesToRead -= n
        Loop While numBytesToRead > 0

        s.Close()
    
        Console.WriteLine("number of bytes read: {0:d}", numBytesRead)
    End Sub
End Class

Remarques

Utilisez la CanRead propriété pour déterminer si le instance actuel prend en charge la lecture. Utilisez la ReadAsync méthode pour lire de manière asynchrone à partir du flux actuel.

Les implémentations de cette méthode lisent un maximum d’octets count du flux actuel et les stockent dans à buffer partir offsetde . La position actuelle dans le flux est avancée par le nombre d’octets lus ; Toutefois, si une exception se produit, la position actuelle dans le flux reste inchangée. Les implémentations retournent le nombre d’octets lus. Si plus de zéro octet est demandé, l’implémentation ne termine pas l’opération tant qu’au moins un octet de données ne peut pas être lu (certaines implémentations peuvent également ne pas se terminer tant qu’au moins un octet n’est pas disponible même si zéro octet a été demandé, mais aucune donnée ne sera consommée à partir du flux dans ce cas). Read retourne 0 uniquement si zéro octet a été demandé ou lorsqu’il n’y a plus de données dans le flux et qu’aucun autre élément n’est attendu (par exemple, un socket fermé ou la fin du fichier). Une implémentation est libre de retourner moins d’octets que demandé même si la fin du flux n’a pas été atteinte.

À utiliser BinaryReader pour lire les types de données primitifs.

Voir aussi

S’applique à