Ler en inglés

Compartir por


BinaryReader.Read Método

Definición

Lee los bytes de la secuencia subyacente y hace avanzar la posición actual de la secuencia.

Sobrecargas

Read()

Lee los caracteres de la secuencia subyacente y hace avanzar la posición actual de la secuencia de acuerdo con la Encoding usada y el carácter concreto que se lea de la secuencia.

Read(Span<Byte>)

Lee una secuencia de bytes en el flujo actual y avanza la posición en el flujo según el número de bytes leídos.

Read(Span<Char>)

Lee, en la secuencia actual, el mismo número de caracteres que la longitud del búfer proporcionado, los escribe en el búfer proporcionado y hace avanzar la posición actual de acuerdo con el elemento Encoding usado y el carácter concreto que se lee en la secuencia.

Read(Byte[], Int32, Int32)

Lee el número especificado de bytes de la secuencia, a partir del punto especificado en la matriz de bytes.

Read(Char[], Int32, Int32)

Lee el número especificado de caracteres de la secuencia, a partir del punto especificado en la matriz de caracteres.

Read()

Source:
BinaryReader.cs
Source:
BinaryReader.cs
Source:
BinaryReader.cs

Lee los caracteres de la secuencia subyacente y hace avanzar la posición actual de la secuencia de acuerdo con la Encoding usada y el carácter concreto que se lea de la secuencia.

C#
public virtual int Read ();

Devoluciones

Siguiente carácter de la secuencia de entrada o -1 si no hay más caracteres disponibles en este momento.

Excepciones

Error de E/S.

La secuencia está cerrada.

Ejemplos

En el ejemplo siguiente se muestra cómo leer y escribir datos con memoria como almacén de respaldo. En este ejemplo se muestra una lista de caracteres de ruta de acceso de archivo no válidos a la consola. Aunque el código intenta mostrar una lista de todos los caracteres de ruta de acceso de archivo no válidos, no todos los caracteres están dentro del conjunto de caracteres que se puede mostrar. Dado que la lista de caracteres no válidos puede variar en función del sistema, la salida de este código también puede variar.

C#
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);
    }
}

Comentarios

BinaryReader no restaura la posición del archivo después de una lectura incorrecta.

Para obtener una lista de tareas de E/S comunes, consulte Tareas de E/S comunes.

Consulte también

Se aplica a

.NET 9 e outras versións
Produto Versións
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Read(Span<Byte>)

Source:
BinaryReader.cs
Source:
BinaryReader.cs
Source:
BinaryReader.cs

Lee una secuencia de bytes en el flujo actual y avanza la posición en el flujo según el número de bytes leídos.

C#
public virtual int Read (Span<byte> buffer);

Parámetros

buffer
Span<Byte>

Región de memoria. Cuando este método finaliza, el contenido de esta región se reemplaza por los bytes leídos del origen actual.

Devoluciones

Número total de bytes leídos en el búfer. Puede ser menor que el número de bytes asignado en el búfer si esos bytes no están disponibles en ese momento o cero (0) si se ha alcanzado el final de la secuencia.

Excepciones

La secuencia está cerrada.

Error de E/S.

Se aplica a

.NET 9 e outras versións
Produto Versións
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

Read(Span<Char>)

Source:
BinaryReader.cs
Source:
BinaryReader.cs
Source:
BinaryReader.cs

Lee, en la secuencia actual, el mismo número de caracteres que la longitud del búfer proporcionado, los escribe en el búfer proporcionado y hace avanzar la posición actual de acuerdo con el elemento Encoding usado y el carácter concreto que se lee en la secuencia.

C#
public virtual int Read (Span<char> buffer);

Parámetros

buffer
Span<Char>

Intervalo de caracteres. Cuando este método finaliza, el contenido de esta región se reemplaza por los bytes leídos en el origen actual.

Devoluciones

Número total de caracteres leídos en el búfer. Este podría ser inferior al número de caracteres solicitado si dicho número de caracteres no se encuentra disponible o podría ser cero si se alcanza el final de la secuencia.

Excepciones

La secuencia está cerrada.

Error de E/S.

Se aplica a

.NET 9 e outras versións
Produto Versións
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

Read(Byte[], Int32, Int32)

Source:
BinaryReader.cs
Source:
BinaryReader.cs
Source:
BinaryReader.cs

Lee el número especificado de bytes de la secuencia, a partir del punto especificado en la matriz de bytes.

C#
public virtual int Read (byte[] buffer, int index, int count);

Parámetros

buffer
Byte[]

Búfer en el que se leen los datos.

index
Int32

Punto inicial del búfer en el que comienza la lectura.

count
Int32

Número de bytes que se va a leer.

Devoluciones

Número de bytes leídos en buffer. Podría ser inferior al número de bytes solicitado si ese número de bytes no está disponible, o podría ser cero si se alcanza el final de la secuencia.

Excepciones

La longitud del búfer menos index es menor que count.

O bien

El número de caracteres descodificados para leer es mayor que count. Esto puede pasar si un descodificador de Unicode devuelve caracteres de reserva o un par suplente.

buffer es null.

index o count es negativo.

La secuencia está cerrada.

Error de E/S.

Ejemplos

En el ejemplo siguiente se muestra cómo escribir datos binarios mediante el uso de memoria como almacén de respaldo. Muestra un mensaje en la consola que indica si los datos se escribieron correctamente.

C#
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.");
        }
    }
}

En este ejemplo se lee el contenido de un archivo y se muestra el valor numérico de cada byte en formato de 16 columnas. El final del archivo que se lee se detecta cuando el Read método devuelve cero bytes.

C#
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);
        }
    }
}

Comentarios

BinaryReader no restaura la posición del archivo después de una operación de lectura incorrecta.

Para obtener una lista de tareas de E/S comunes, consulte Tareas de E/S comunes.

Consulte también

Se aplica a

.NET 9 e outras versións
Produto Versións
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Read(Char[], Int32, Int32)

Source:
BinaryReader.cs
Source:
BinaryReader.cs
Source:
BinaryReader.cs

Lee el número especificado de caracteres de la secuencia, a partir del punto especificado en la matriz de caracteres.

C#
public virtual int Read (char[] buffer, int index, int count);

Parámetros

buffer
Char[]

Búfer en el que se leen los datos.

index
Int32

Punto inicial del búfer en el que comienza la lectura.

count
Int32

Número de caracteres que se va a leer.

Devoluciones

Número total de caracteres leídos en el búfer. Este podría ser inferior al número de caracteres solicitado si dicho número de caracteres no se encuentra disponible o podría ser cero si se alcanza el final de la secuencia.

Excepciones

La longitud del búfer menos index es menor que count.

O bien

El número de caracteres descodificados para leer es mayor que count. Esto puede pasar si un descodificador de Unicode devuelve caracteres de reserva o un par suplente.

buffer es null.

index o count es negativo.

La secuencia está cerrada.

Error de E/S.

Ejemplos

En el ejemplo siguiente se muestra cómo leer y escribir datos con memoria como almacén de respaldo. En este ejemplo se muestra una lista de caracteres de ruta de acceso de archivo no válidos a la consola. Aunque el código intenta mostrar una lista de todos los caracteres de ruta de acceso de archivo no válidos, no todos los caracteres están dentro del conjunto de caracteres que se puede mostrar. Dado que la lista de caracteres no válidos puede variar en función del sistema, la salida de este código también puede variar.

C#
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);
    }
}

Comentarios

BinaryReader no restaura la posición del archivo después de una operación de lectura incorrecta.

Para obtener una lista de tareas de E/S comunes, consulte Tareas de E/S comunes.

Consulte también

Se aplica a

.NET 9 e outras versións
Produto Versións
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0