BinaryReader.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.
Lit les octets du flux sous-jacent et avance la position actuelle du flux.
Surcharges
| Nom | Description |
|---|---|
| Read() |
Lit les caractères du flux sous-jacent et avance la position actuelle du flux conformément au |
| Read(Span<Byte>) |
Lit une séquence d’octets à partir du flux actuel et avance la position dans le flux en fonction du nombre d’octets lus. |
| Read(Span<Char>) |
Lit, à partir du flux actuel, le même nombre de caractères que la longueur de la mémoire tampon fournie, les écrit dans la mémoire tampon fournie et avance la position actuelle conformément à l’usage |
| Read(Byte[], Int32, Int32) |
Lit le nombre spécifié d’octets du flux, à partir d’un point spécifié dans le tableau d’octets. |
| Read(Char[], Int32, Int32) |
Lit le nombre spécifié de caractères du flux, à partir d’un point spécifié dans le tableau de caractères. |
Read()
Lit les caractères du flux sous-jacent et avance la position actuelle du flux conformément au Encoding caractère utilisé et spécifique lu à partir du flux.
public:
virtual int Read();
public virtual int Read();
abstract member Read : unit -> int
override this.Read : unit -> int
Public Overridable Function Read () As Integer
Retours
Caractère suivant du flux d’entrée ou -1 si aucun caractère n’est actuellement disponible.
Exceptions
Une erreur d’E/S s’est produite.
Le flux est fermé.
Exemples
L’exemple suivant montre comment lire et écrire des données à l’aide de la mémoire en tant que magasin de stockage. Cet exemple montre comment afficher la liste des caractères de chemin d’accès de fichier non valides à la console. Bien que le code tente d’afficher une liste de tous les caractères de chemin d’accès de fichier non valides, tous les caractères ne figurent pas dans le jeu de caractères affichable. Étant donné que la liste des caractères non valides peut varier en fonction du système, la sortie de ce code peut également varier.
using System;
using System.IO;
class BinaryRW
{
static void Main()
{
int i = 0;
char[] invalidPathChars = Path.InvalidPathChars;
MemoryStream memStream = new MemoryStream();
BinaryWriter binWriter = new BinaryWriter(memStream);
// Write to memory.
binWriter.Write("Invalid file path characters are: ");
for(i = 0; i < invalidPathChars.Length; i++)
{
binWriter.Write(invalidPathChars[i]);
}
// Create the reader using the same MemoryStream
// as used with the writer.
BinaryReader binReader = new BinaryReader(memStream);
// Set Position to the beginning of the stream.
memStream.Position = 0;
// Read the data from memory and write it to the console.
Console.Write(binReader.ReadString());
char[] memoryData =
new char[memStream.Length - memStream.Position];
for(i = 0; i < memoryData.Length; i++)
{
memoryData[i] = Convert.ToChar(binReader.Read());
}
Console.WriteLine(memoryData);
}
}
open System
open System.IO
let invalidPathChars = Path.GetInvalidPathChars()
let memStream = new MemoryStream()
let binWriter = new BinaryWriter(memStream)
// Write to memory.
printf "Invalid file path characters are: "
for i = 0 to invalidPathChars.Length - 1 do
binWriter.Write invalidPathChars[i]
// Create the reader using the same MemoryStream
// as used with the writer.
let binReader = new BinaryReader(memStream)
// Set Position to the beginning of the stream.
memStream.Position <- 0
// Read the data from memory and write it to the console.
printf $"{binReader.ReadString()}"
let memoryData =
[| for _ = 0L to memStream.Length - memStream.Position - 1L do
Convert.ToChar(binReader.Read()) |]
printfn $"{memoryData}"
Imports System.IO
Public Class BinaryRW
Shared Sub Main()
Dim i As Integer = 0
Dim invalidPathChars() As Char = Path.InvalidPathChars
Dim memStream As new MemoryStream()
Dim binWriter As New BinaryWriter(memStream)
' Write to memory.
binWriter.Write("Invalid file path characters are: ")
For i = 0 To invalidPathChars.Length - 1
binWriter.Write(invalidPathChars(i))
Next i
' Create the reader using the same MemoryStream
' as used with the writer.
Dim binReader As New BinaryReader(memStream)
' Set Position to the beginning of the stream.
memStream.Position = 0
' Read the data from memory and write it to the console.
Console.Write(binReader.ReadString())
Dim memoryData( _
CInt(memStream.Length - memStream.Position) - 1) As Char
For i = 0 To memoryData.Length - 1
memoryData(i) = Convert.ToChar(binReader.Read())
Next i
Console.WriteLine(memoryData)
End Sub
End Class
Remarques
BinaryReader ne restaure pas la position du fichier après une lecture infructueuse.
Pour obtenir la liste des tâches d’E/S courantes, consultez Tâches d’E/S courantes.
Voir aussi
- Encoding
- E/S de fichier et de flux
- Guide pratique pour lire du texte à partir d’un fichier
- Guide pratique pour écrire du texte dans un fichier
S’applique à
Read(Span<Byte>)
Lit une séquence d’octets à partir du flux actuel et avance la position dans le flux en fonction 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
Une région de mémoire. Lorsque cette méthode est retournée, le contenu de cette région est remplacé par les octets lus à partir de la source actuelle.
Retours
Nombre total d’octets lus dans la mémoire tampon. Cela peut être inférieur au nombre d’octets alloués dans la mémoire tampon si de nombreux octets ne sont pas actuellement disponibles, ou zéro (0) si la fin du flux a été atteinte.
Exceptions
Le flux est fermé.
Une erreur d’E/S s’est produite.
S’applique à
Read(Span<Char>)
Lit, à partir du flux actuel, le même nombre de caractères que la longueur de la mémoire tampon fournie, les écrit dans la mémoire tampon fournie et avance la position actuelle conformément à l’usage Encoding et au caractère spécifique lu à partir du flux.
public:
virtual int Read(Span<char> buffer);
public virtual int Read(Span<char> buffer);
abstract member Read : Span<char> -> int
override this.Read : Span<char> -> int
Public Overridable Function Read (buffer As Span(Of Char)) As Integer
Paramètres
Étendue de caractères. Lorsque cette méthode est retournée, le contenu de cette région est remplacé par les caractères lus à partir de la source actuelle.
Retours
Nombre total de caractères lus dans la mémoire tampon. Cela peut être inférieur au nombre de caractères demandé si de nombreux caractères ne sont pas actuellement disponibles, ou il peut être égal à zéro si la fin du flux est atteinte.
Exceptions
Le flux est fermé.
Une erreur d’E/S s’est produite.
S’applique à
Read(Byte[], Int32, Int32)
Lit le nombre spécifié d’octets du flux, à partir d’un point spécifié dans le tableau d’octets.
public:
virtual int Read(cli::array <System::Byte> ^ buffer, int index, int count);
public virtual int Read(byte[] buffer, int index, int count);
abstract member Read : byte[] * int * int -> int
override this.Read : byte[] * int * int -> int
Public Overridable Function Read (buffer As Byte(), index As Integer, count As Integer) As Integer
Paramètres
- buffer
- Byte[]
Mémoire tampon dans laquelle lire les données.
- index
- Int32
Point de départ de la mémoire tampon à partir duquel commencer la lecture dans la mémoire tampon.
- count
- Int32
Nombre d’octets à lire.
Retours
Nombre d’octets lus en buffer. Cela peut être inférieur au nombre d’octets demandé si de nombreux octets ne sont pas disponibles, ou il peut être égal à zéro si la fin du flux est atteinte.
Exceptions
La longueur de la mémoire tampon moins index est inférieure à count.
-ou-
Le nombre de caractères décodés à lire est supérieur à count. Cela peut se produire si un décodeur Unicode retourne des caractères de secours ou une paire de substitution.
buffer a la valeur null.
index ou count est négatif.
Le flux est fermé.
Une erreur d’E/S s’est produite.
Exemples
L’exemple suivant montre comment écrire des données binaires à l’aide de la mémoire en tant que magasin de stockage. Il affiche un message dans la console qui indique si les données ont été écrites correctement.
using System;
using System.IO;
namespace BinaryRW
{
class Program
{
static void Main(string[] args)
{
const int arrayLength = 1000;
byte[] dataArray = new byte[arrayLength];
byte[] verifyArray = new byte[arrayLength];
new Random().NextBytes(dataArray);
using (BinaryWriter binWriter = new BinaryWriter(new MemoryStream()))
{
Console.WriteLine("Writing the data.");
binWriter.Write(dataArray, 0, arrayLength);
using (BinaryReader binReader = new BinaryReader(binWriter.BaseStream))
{
binReader.BaseStream.Position = 0;
if (binReader.Read(verifyArray, 0, arrayLength) != arrayLength)
{
Console.WriteLine("Error writing the data.");
return;
}
}
}
for (int i = 0; i < arrayLength; i++)
{
if (verifyArray[i] != dataArray[i])
{
Console.WriteLine("Error writing the data.");
return;
}
}
Console.WriteLine("The data was written and verified.");
}
}
}
open System
open System.IO
let arrayLength = 1000
let dataArray = Array.zeroCreate<byte> arrayLength
let verifyArray = Array.zeroCreate<byte> arrayLength
Random().NextBytes dataArray
do
use binWriter = new BinaryWriter(new MemoryStream())
printfn "Writing the data."
binWriter.Write(dataArray, 0, arrayLength)
use binReader = new BinaryReader(binWriter.BaseStream)
binReader.BaseStream.Position <- 0
if binReader.Read(verifyArray, 0, arrayLength) <> arrayLength then
printfn "Error writing the data."
else
for i = 0 to arrayLength - 1 do
if verifyArray[i] <> dataArray[i] then
printfn "Error writing the data."
else
printfn "The data was written and verified."
Imports System.IO
Module Module1
Sub Main()
Const upperBound As Integer = 1000
Dim dataArray(upperBound) As Byte
Dim verifyArray(upperBound) As Byte
Dim randomGenerator As New Random
randomGenerator.NextBytes(dataArray)
Using binWriter As New BinaryWriter(New MemoryStream())
Console.WriteLine("Writing the data.")
binWriter.Write(dataArray, 0, dataArray.Length)
Using binReader As New BinaryReader(binWriter.BaseStream)
binReader.BaseStream.Position = 0
If binReader.Read(verifyArray, 0, dataArray.Length) <> dataArray.Length Then
Console.WriteLine("Error writing the data.")
Return
End If
End Using
End Using
For i As Integer = 0 To upperBound
If verifyArray(i) <> dataArray(i) Then
Console.WriteLine("Error writing the data.")
Return
End If
Next i
Console.WriteLine("The data was written and verified.")
End Sub
End Module
Cet exemple lit le contenu d’un fichier et affiche la valeur numérique de chaque octet au format 16 colonnes. La fin du fichier en cours de lecture est détectée lorsque la Read méthode retourne zéro octets.
using System;
using System.IO;
using System.Text;
public class DumpFileSample
{
private static readonly int CHUNK_SIZE = 1024;
public static void Main(String[] args)
{
if ((args.Length == 0) || !File.Exists(args[0]))
{
Console.WriteLine("Please provide an existing file name.");
}
else
{
using (FileStream fs = new FileStream(args[0], FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs, new ASCIIEncoding()))
{
byte[] chunk;
chunk = br.ReadBytes(CHUNK_SIZE);
while(chunk.Length > 0)
{
DumpBytes(chunk, chunk.Length);
chunk = br.ReadBytes(CHUNK_SIZE);
}
}
}
}
}
public static void DumpBytes(byte[] bdata, int len)
{
int i;
int j = 0;
char dchar;
// 3 * 16 chars for hex display, 16 chars for text and 8 chars
// for the 'gutter' int the middle.
StringBuilder dumptext = new StringBuilder(" ", 16 * 4 + 8);
for (i = 0; i < len; i++)
{
dumptext.Insert(j * 3, String.Format("{0:X2} ", (int)bdata[i]));
dchar = (char)bdata[i];
//' replace 'non-printable' chars with a '.'.
if (Char.IsWhiteSpace(dchar) || Char.IsControl(dchar))
{
dchar = '.';
}
dumptext.Append(dchar);
j++;
if (j == 16)
{
Console.WriteLine(dumptext);
dumptext.Length = 0;
dumptext.Append(" ");
j = 0;
}
}
// display the remaining line
if (j > 0)
{
for (i = j; i < 16; i++)
{
dumptext.Insert(j * 3, " ");
}
Console.WriteLine(dumptext);
}
}
}
open System
open System.IO
open System.Text
let CHUNK_SIZE = 1024
let dumpBytes (bdata: byte[]) len =
let mutable j = 0
// 3 * 16 chars for hex display, 16 chars for text and 8 chars
// for the 'gutter' int the middle.
let dumptext = StringBuilder(" ", 16 * 4 + 8)
for i = 0 to len - 1 do
dumptext.Insert(j * 3, $"{int bdata[i]:X2} ") |> ignore
let dchar = char bdata[i]
//' replace 'non-printable' chars with a '.'.
let dchar =
if Char.IsWhiteSpace dchar || Char.IsControl dchar then
'.'
else
dchar
dumptext.Append dchar |> ignore
j <- j + 1
if j = 16 then
printfn $"{dumptext}"
dumptext.Length <- 0
dumptext.Append " " |> ignore
j <- 0
// display the remaining line
if j > 0 then
for i = j to 15 do
dumptext.Insert(j * 3, " ") |> ignore
printfn $"{dumptext}"
[<EntryPoint>]
let main args =
if args.Length = 0 || File.Exists args[0] |> not then
printfn "Please provide an existing file name."
else
use fs = new FileStream(args[0], FileMode.Open, FileAccess.Read)
use br = new BinaryReader(fs, ASCIIEncoding())
let mutable chunk = br.ReadBytes CHUNK_SIZE
while chunk.Length > 0 do
dumpBytes chunk chunk.Length
chunk <- br.ReadBytes CHUNK_SIZE
0
Imports System.IO
Imports System.Text
Module Module1
Private ReadOnly CHUNK_SIZE As Integer = 1024
Public Sub Main(args() As String)
If ((args.Length = 0) OrElse Not File.Exists(args(0))) Then
Console.WriteLine("Please provide an existing file name.")
Else
Using fs As FileStream = New FileStream(args(0), FileMode.Open, FileAccess.Read)
Using br As New BinaryReader(fs, New ASCIIEncoding())
Dim chunk(CHUNK_SIZE) As Byte
chunk = br.ReadBytes(CHUNK_SIZE)
While chunk.Length > 0
DumpBytes(chunk, chunk.Length)
chunk = br.ReadBytes(CHUNK_SIZE)
End While
End Using
End Using
End If
End Sub
Public Sub DumpBytes(bdata() As Byte, len As Integer)
Dim i As Integer
Dim j As Integer = 0
Dim dchar As Char
' 3 * 16 chars for hex display, 16 chars for text and 8 chars
' for the 'gutter' int the middle.
Dim dumptext As New StringBuilder(" ", 16 * 4 + 8)
For i = 0 To len - 1
dumptext.Insert(j * 3, String.Format("{0:X2} ", CType(bdata(i), Integer)))
dchar = Convert.ToChar(bdata(i))
' replace 'non-printable' chars with a '.'.
If Char.IsWhiteSpace(dchar) Or Char.IsControl(dchar) Then
dchar = "."
End If
dumptext.Append(dchar)
j += 1
If j = 16 Then
Console.WriteLine(dumptext)
dumptext.Length = 0
dumptext.Append(" ")
j = 0
End If
Next i
' display the remaining line
If j > 0 Then
' add blank hex spots to align the 'gutter'.
For i = j To 15
dumptext.Insert(j * 3, " ")
Next i
Console.WriteLine(dumptext)
End If
End Sub
End Module
Remarques
BinaryReader ne restaure pas la position du fichier après une opération de lecture infructueuse.
Pour obtenir la liste des tâches d’E/S courantes, consultez Tâches d’E/S courantes.
Voir aussi
- E/S de fichier et de flux
- Guide pratique pour lire du texte à partir d’un fichier
- Guide pratique pour écrire du texte dans un fichier
S’applique à
Read(Char[], Int32, Int32)
Lit le nombre spécifié de caractères du flux, à partir d’un point spécifié dans le tableau de caractères.
public:
virtual int Read(cli::array <char> ^ buffer, int index, int count);
public virtual int Read(char[] buffer, int index, int count);
abstract member Read : char[] * int * int -> int
override this.Read : char[] * int * int -> int
Public Overridable Function Read (buffer As Char(), index As Integer, count As Integer) As Integer
Paramètres
- buffer
- Char[]
Mémoire tampon dans laquelle lire les données.
- index
- Int32
Point de départ de la mémoire tampon à partir duquel commencer la lecture dans la mémoire tampon.
- count
- Int32
Nombre de caractères à lire.
Retours
Nombre total de caractères lus dans la mémoire tampon. Cela peut être inférieur au nombre de caractères demandé si de nombreux caractères ne sont pas actuellement disponibles, ou il peut être égal à zéro si la fin du flux est atteinte.
Exceptions
La longueur de la mémoire tampon moins index est inférieure à count.
-ou-
Le nombre de caractères décodés à lire est supérieur à count. Cela peut se produire si un décodeur Unicode retourne des caractères de secours ou une paire de substitution.
buffer a la valeur null.
index ou count est négatif.
Le flux est fermé.
Une erreur d’E/S s’est produite.
Exemples
L’exemple suivant montre comment lire et écrire des données à l’aide de la mémoire en tant que magasin de stockage. Cet exemple montre comment afficher la liste des caractères de chemin d’accès de fichier non valides à la console. Bien que le code tente d’afficher une liste de tous les caractères de chemin d’accès de fichier non valides, tous les caractères ne figurent pas dans le jeu de caractères affichable. Étant donné que la liste des caractères non valides peut varier en fonction du système, la sortie de ce code peut également varier.
using System;
using System.IO;
class BinaryRW
{
static void Main()
{
char[] invalidPathChars = Path.InvalidPathChars;
MemoryStream memStream = new MemoryStream();
BinaryWriter binWriter = new BinaryWriter(memStream);
// Write to memory.
binWriter.Write("Invalid file path characters are: ");
binWriter.Write(
Path.InvalidPathChars, 0, Path.InvalidPathChars.Length);
// Create the reader using the same MemoryStream
// as used with the writer.
BinaryReader binReader = new BinaryReader(memStream);
// Set Position to the beginning of the stream.
memStream.Position = 0;
// Read the data from memory and write it to the console.
Console.Write(binReader.ReadString());
int arraySize = (int)(memStream.Length - memStream.Position);
char[] memoryData = new char[arraySize];
binReader.Read(memoryData, 0, arraySize);
Console.WriteLine(memoryData);
}
}
open System.IO
let invalidPathChars = Path.GetInvalidPathChars()
let memStream = new MemoryStream()
let binWriter = new BinaryWriter(memStream)
// Write to memory.
binWriter.Write "Invalid file path characters are: "
binWriter.Write(invalidPathChars, 0, invalidPathChars.Length)
// Create the reader using the same MemoryStream
// as used with the writer.
let binReader = new BinaryReader(memStream)
// Set Position to the beginning of the stream.
memStream.Position <- 0
// Read the data from memory and write it to the console.
printf $"{binReader.ReadString()}"
let arraySize = memStream.Length - memStream.Position |> int
let memoryData = Array.zeroCreate<char> arraySize
binReader.Read(memoryData, 0, arraySize) |> ignore
printfn $"{memoryData}"
Imports System.IO
Public Class BinaryRW
Shared Sub Main()
Dim invalidPathChars() As Char = Path.InvalidPathChars
Dim memStream As new MemoryStream()
Dim binWriter As New BinaryWriter(memStream)
' Write to memory.
binWriter.Write("Invalid file path characters are: ")
binWriter.Write(Path.InvalidPathChars, 0, _
Path.InvalidPathChars.Length)
' Create the reader using the same MemoryStream
' as used with the writer.
Dim binReader As New BinaryReader(memStream)
' Set Position to the beginning of the stream.
memStream.Position = 0
' Read the data from memory and write it to the console.
Console.Write(binReader.ReadString())
Dim upperBound As Integer = _
CInt(memStream.Length - memStream.Position) - 1
Dim memoryData(upperBound) As Char
binReader.Read(memoryData, 0, upperBound)
Console.WriteLine(memoryData)
End Sub
End Class
Remarques
BinaryReader ne restaure pas la position du fichier après une opération de lecture infructueuse.
Pour obtenir la liste des tâches d’E/S courantes, consultez Tâches d’E/S courantes.
Voir aussi
- E/S de fichier et de flux
- Guide pratique pour lire du texte à partir d’un fichier
- Guide pratique pour écrire du texte dans un fichier