Sdílet prostřednictvím


Stream.Read Metoda

Definice

Přetížení

Read(Span<Byte>)

Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů.

Read(Byte[], Int32, Int32)

Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů.

Read(Span<Byte>)

Zdroj:
Stream.cs
Zdroj:
Stream.cs
Zdroj:
Stream.cs

Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového 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. Při vrácení této metody se obsah této oblasti nahradí bajty načtenými z aktuálního zdroje.

Návraty

Celkový počet bajtů načtených do vyrovnávací paměti. To může být menší než velikost vyrovnávací paměti, pokud tento počet bajtů není aktuálně k dispozici, nebo nula (0), pokud je délka vyrovnávací paměti nula nebo bylo dosaženo konce datového proudu.

Poznámky

CanRead Pomocí vlastnosti určete, jestli aktuální instance podporuje čtení. K asynchronnímu čtení z aktuálního datového ReadAsync proudu použijte metodu .

Implementace této metody načtou maximální počet bajtů z aktuálního buffer.Length datového proudu a uloží je do buffer. Aktuální pozice v rámci streamu je rozšířena o počet přečtených bajtů; Pokud však dojde k výjimce, aktuální pozice v rámci datového proudu zůstane beze změny. Implementace vrátí počet přečtených bajtů. Pokud je požadováno více než nula bajtů, implementace operaci nedokončí, dokud nebude možné přečíst alespoň jeden bajt dat (pokud bylo požadováno nula bajtů, některé implementace se podobně nemusí dokončit, dokud nebude k dispozici alespoň jeden bajt, ale v takovém případě se ze streamu nebudou spotřebovávat žádná data). Read vrátí hodnotu 0 pouze v případě, že byl požadován žádný bajt nebo pokud datový proud neobsahuje žádná další data a neočekává se žádné další (například uzavřený soket nebo konec souboru). Implementace může bezplatně vracet méně bajtů, než je požadováno, i když nebylo dosaženo konce datového proudu.

Slouží BinaryReader ke čtení primitivních datových typů.

Platí pro

Read(Byte[], Int32, Int32)

Zdroj:
Stream.cs
Zdroj:
Stream.cs
Zdroj:
Stream.cs

Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů.

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

Parametry

buffer
Byte[]

Pole bajtů. Když se tato metoda vrátí, vyrovnávací paměť obsahuje zadané pole bajtů s hodnotami mezi offset a (offset + count - 1) nahrazené bajty načtenými z aktuálního zdroje.

offset
Int32

Nulový odsazení bajtů, při buffer kterém se mají začít ukládat data načtená z aktuálního datového proudu.

count
Int32

Maximální počet bajtů, které se mají načíst z aktuálního datového proudu.

Návraty

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

Výjimky

Součet offset a count je větší než délka vyrovnávací paměti.

buffer je null.

offset nebo count je negativní.

Dojde k vstupně-výstupní chybě.

Stream nepodporuje čtení.

Metody byly volány po zavření datového proudu.

Příklady

Následující příklad ukazuje, jak použít Read ke čtení bloku dat.

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

Poznámky

CanRead Pomocí vlastnosti určete, jestli aktuální instance podporuje čtení. K asynchronnímu čtení z aktuálního datového ReadAsync proudu použijte metodu .

Implementace této metody načtou maximální počet bajtů z aktuálního count datového proudu a uloží je na buffer začátku od offset. Aktuální pozice v rámci streamu je rozšířena o počet přečtených bajtů; Pokud však dojde k výjimce, aktuální pozice v rámci datového proudu zůstane beze změny. Implementace vrátí počet přečtených bajtů. Pokud je požadováno více než nula bajtů, implementace operaci nedokončí, dokud nebude možné číst alespoň jeden bajt dat (některé implementace se podobně nemusí dokončit, dokud nebude k dispozici alespoň jeden bajt, i když byl požadován žádný bajt, ale v takovém případě se ze streamu nebudou spotřebovávat žádná data). Read vrátí hodnotu 0 pouze v případě, že byl požadován žádný bajt nebo pokud datový proud neobsahuje žádná další data a neočekává se žádné další (například uzavřený soket nebo konec souboru). Implementace může bezplatně vracet méně bajtů, než je požadováno, i když nebylo dosaženo konce datového proudu.

Slouží BinaryReader ke čtení primitivních datových typů.

Viz také

Platí pro