BinaryReader.Read Metoda

Definice

Přečte bajty z podkladového datového proudu a posune aktuální pozici datového proudu.

Přetížení

Name Description
Read()

Přečte znaky z podkladového datového proudu a posune aktuální pozici datového proudu v souladu s použitým Encoding a konkrétním znakem, který se čte z datového proudu.

Read(Span<Byte>)

Přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet přečtených bajtů.

Read(Span<Char>)

Přečte z aktuálního datového proudu stejný počet znaků jako délka poskytnuté vyrovnávací paměti, zapíše je do poskytnuté vyrovnávací paměti a přepojí aktuální pozici v souladu s použitým Encoding a konkrétním znakem přečteným ze streamu.

Read(Byte[], Int32, Int32)

Přečte zadaný počet bajtů z datového proudu počínaje zadaným bodem v bajtovém poli.

Read(Char[], Int32, Int32)

Přečte zadaný počet znaků z datového proudu počínaje zadaným bodem v matici znaků.

Read()

Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs

Přečte znaky z podkladového datového proudu a posune aktuální pozici datového proudu v souladu s použitým Encoding a konkrétním znakem, který se čte z datového proudu.

public:
 virtual int Read();
public virtual int Read();
abstract member Read : unit -> int
override this.Read : unit -> int
Public Overridable Function Read () As Integer

Návraty

Další znak ze vstupního datového proudu nebo -1, pokud nejsou aktuálně k dispozici žádné znaky.

Výjimky

Došlo k vstupně-výstupní chybě.

Stream je zavřený.

Příklady

Následující příklad ukazuje, jak číst a zapisovat data pomocí paměti jako záložní úložiště. Tento příklad zobrazí seznam neplatných znaků cesty k souboru do konzoly. I když se kód pokusí zobrazit seznam všech neplatných znaků cesty k souboru, ne všechny znaky jsou v zobrazené sadě znaků. Vzhledem k tomu, že seznam neplatných znaků se může lišit v závislosti na systému, může se výstup pro tento kód lišit.

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

Poznámky

BinaryReader neobnoví pozici souboru po neúspěšném čtení.

Seznam běžných vstupně-výstupních úloh najdete v tématu Běžné vstupně-výstupní úlohy.

Viz také

Platí pro

Read(Span<Byte>)

Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs

Přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet přečtených bajtů.

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

Parametry

buffer
Span<Byte>

Oblast paměti. Když tato metoda vrátí, obsah této oblasti se nahradí bajty načtenými z aktuálního zdroje.

Návraty

Celkový počet bajtů přečtených do vyrovnávací paměti. To může být menší než počet bajtů přidělených ve vyrovnávací paměti, pokud není aktuálně k dispozici mnoho bajtů, nebo nula (0), pokud bylo dosaženo konce datového proudu.

Výjimky

Stream je zavřený.

Došlo k vstupně-výstupní chybě.

Platí pro

Read(Span<Char>)

Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs

Přečte z aktuálního datového proudu stejný počet znaků jako délka poskytnuté vyrovnávací paměti, zapíše je do poskytnuté vyrovnávací paměti a přepojí aktuální pozici v souladu s použitým Encoding a konkrétním znakem přečteným ze streamu.

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

Parametry

buffer
Span<Char>

Rozsah znaků. Když tato metoda vrátí, obsah této oblasti se nahradí znaky přečtené z aktuálního zdroje.

Návraty

Celkový počet znaků přečtených do vyrovnávací paměti. To může být menší než počet požadovaných znaků, pokud není aktuálně k dispozici mnoho znaků, nebo může být nula, pokud je dosaženo konce datového proudu.

Výjimky

Stream je zavřený.

Došlo k vstupně-výstupní chybě.

Platí pro

Read(Byte[], Int32, Int32)

Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs

Přečte zadaný počet bajtů z datového proudu počínaje zadaným bodem v bajtovém poli.

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

Parametry

buffer
Byte[]

Vyrovnávací paměť pro čtení dat do.

index
Int32

Počáteční bod v vyrovnávací paměti, ve které se má začít číst do vyrovnávací paměti.

count
Int32

Počet bajtů, které se mají přečíst.

Návraty

Počet bajtů přečtených do buffer. To může být menší než počet bajtů požadovaných v případě, že není k dispozici mnoho bajtů, nebo pokud je dosaženo konce datového proudu, může to být nula.

Výjimky

Délka vyrovnávací paměti je menší index než count.

nebo

Počet dekódovaných znaků pro čtení je větší než count. K tomu může dojít v případě, že dekodér Unicode vrátí náhradní znaky nebo náhradní dvojici.

buffer je null.

index nebo count je negativní.

Stream je zavřený.

Došlo k vstupně-výstupní chybě.

Příklady

Následující příklad ukazuje, jak zapisovat binární data pomocí paměti jako záložní úložiště. Zobrazí se v konzole zpráva, která označuje, jestli byla data zapsána správně.

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

Tento příklad přečte obsah souboru a zobrazí číselnou hodnotu jednotlivých bajtů ve formátu 16 sloupců. Konec souboru, který se čte, se zjistí, když Read metoda vrátí nulové bajty.

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

Poznámky

BinaryReader neobnoví pozici souboru po neúspěšné operaci čtení.

Seznam běžných vstupně-výstupních úloh najdete v tématu Běžné vstupně-výstupní úlohy.

Viz také

Platí pro

Read(Char[], Int32, Int32)

Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs
Zdroj:
BinaryReader.cs

Přečte zadaný počet znaků z datového proudu počínaje zadaným bodem v matici znaků.

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

Parametry

buffer
Char[]

Vyrovnávací paměť pro čtení dat do.

index
Int32

Počáteční bod v vyrovnávací paměti, ve které se má začít číst do vyrovnávací paměti.

count
Int32

Počet znaků, které se mají přečíst.

Návraty

Celkový počet znaků přečtených do vyrovnávací paměti. To může být menší než počet požadovaných znaků, pokud není aktuálně k dispozici mnoho znaků, nebo může být nula, pokud je dosaženo konce datového proudu.

Výjimky

Délka vyrovnávací paměti je menší index než count.

nebo

Počet dekódovaných znaků pro čtení je větší než count. K tomu může dojít v případě, že dekodér Unicode vrátí náhradní znaky nebo náhradní dvojici.

buffer je null.

index nebo count je negativní.

Stream je zavřený.

Došlo k vstupně-výstupní chybě.

Příklady

Následující příklad ukazuje, jak číst a zapisovat data pomocí paměti jako záložní úložiště. Tento příklad zobrazí seznam neplatných znaků cesty k souboru do konzoly. I když se kód pokusí zobrazit seznam všech neplatných znaků cesty k souboru, ne všechny znaky jsou v zobrazené sadě znaků. Vzhledem k tomu, že seznam neplatných znaků se může lišit v závislosti na systému, může se výstup pro tento kód lišit.

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

Poznámky

BinaryReader neobnoví pozici souboru po neúspěšné operaci čtení.

Seznam běžných vstupně-výstupních úloh najdete v tématu Běžné vstupně-výstupní úlohy.

Viz také

Platí pro