Stream.Read Método

Definição

Sobrecargas

Read(Span<Byte>)

Quando for substituído em uma classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo até o número de bytes lidos.

Read(Byte[], Int32, Int32)

Quando for substituído em uma classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo até o número de bytes lidos.

Read(Span<Byte>)

Quando for substituído em uma classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo até o número de bytes lidos.

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

Parâmetros

buffer
Span<Byte>

Uma região da memória. Quando este método retorna, o conteúdo desta região é substituído pelos bytes lidos da fonte atual.

Retornos

Int32

O número total de bytes lidos do buffer. Isso poderá ser menor que o número de bytes alocados no buffer se esses muitos bytes não estiverem disponíveis no momento, ou zero (0), se o final do fluxo tiver sido atingido.

Comentários

Use a CanRead propriedade para determinar se a instância atual dá suporte à leitura. Use o ReadAsync método para ler de forma assíncrona do fluxo atual.

As implementações desse método leem um máximo de buffer.Length bytes do fluxo atual e os armazenam.buffer A posição atual dentro do fluxo é avançada pelo número de bytes lidos; no entanto, se ocorrer uma exceção, a posição atual dentro do fluxo permanecerá inalterada. As implementações retornam o número de bytes lidos. A implementação será bloqueada até que pelo menos um byte de dados possa ser lido, caso nenhum dado esteja disponível. Read retorna 0 somente quando não há mais dados no fluxo e não é mais esperado (como um soquete fechado ou fim do arquivo). Uma implementação é livre para retornar menos bytes do que o solicitado, mesmo que o final do fluxo não tenha sido atingido.

Use BinaryReader para ler tipos de dados primitivos.

Aplica-se a

Read(Byte[], Int32, Int32)

Quando for substituído em uma classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo até o número de bytes lidos.

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

Parâmetros

buffer
Byte[]

Uma matriz de bytes. Quando esse método retorna, o buffer contém a matriz de bytes especificada com os valores entre offset e (offset + count -1) substituídos pelos bytes lidos da origem atual.

offset
Int32

O deslocamento de bytes baseado em zero em buffer no qual será iniciada a leitura de dados no fluxo atual.

count
Int32

O número máximo de bytes a serem lidos no fluxo atual.

Retornos

Int32

O número total de bytes lidos do buffer. Isso poderá ser menor que o número de bytes solicitado se esses muitos bytes não estiverem disponíveis no momento, ou zero (0) se o final do fluxo tiver sido atingido.

Exceções

A soma de offset e count é maior que o tamanho do buffer.

buffer é null.

offset ou count é negativo.

Ocorre um erro de E/S.

Não há suporte para leitura no fluxo.

Foram chamados métodos depois que o fluxo foi fechado.

Exemplos

O exemplo a seguir mostra como usar Read para ler um bloco de dados.

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

Comentários

Use a CanRead propriedade para determinar se a instância atual dá suporte à leitura. Use o ReadAsync método para ler de forma assíncrona do fluxo atual.

As implementações desse método leem um máximo de count bytes do fluxo atual e os armazenam no buffer início.offset A posição atual dentro do fluxo é avançada pelo número de bytes lidos; no entanto, se ocorrer uma exceção, a posição atual dentro do fluxo permanecerá inalterada. As implementações retornam o número de bytes lidos. A implementação será bloqueada até que pelo menos um byte de dados possa ser lido, caso nenhum dado esteja disponível. Read retorna 0 somente quando não há mais dados no fluxo e não é esperado mais (como um soquete fechado ou fim do arquivo). Uma implementação é livre para retornar menos bytes do que o solicitado, mesmo que o final do fluxo não tenha sido atingido.

Use BinaryReader para ler tipos de dados primitivos.

Confira também

Aplica-se a