Stream.Read Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
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 offset
de . 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
- Fichier et flux de données E/S
- Procédure : lire le texte d’un fichier
- Procédure : écrire du texte dans un fichier