Stream.Read Método

Definição

Sobrecargas

Name Description
Read(Span<Byte>)

Quando sobreposto numa classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

Read(Byte[], Int32, Int32)

Quando sobreposto numa classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

Read(Span<Byte>)

Quando sobreposto numa classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo 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.

Devoluções

O número total de bytes lidos no buffer. Isto pode ser inferior ao tamanho do buffer se não houver esse número de bytes disponível no momento, ou zero (0) se o comprimento do buffer for zero ou se o fim do fluxo tiver sido atingido.

Observações

Use a CanRead propriedade para determinar se a instância atual suporta leitura. Use o ReadAsync método para ler assíncronamente a partir do fluxo atual.

Implementações deste método leem um máximo de buffer.Length bytes do fluxo atual e armazenam-nos em 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 mantém-se inalterada. As implementações devolvem o número de bytes lidos. Se forem solicitados mais de zero bytes, a implementação não completará a operação até que pelo menos um byte de dados possa ser lido (se foram solicitados zero bytes, algumas implementações podem igualmente não concluir até que pelo menos um byte esteja disponível, mas nesse caso nenhum dado será consumido do fluxo). Read retorna 0 apenas se foram solicitados zero bytes ou quando não há mais dados no fluxo e não se espera mais (como um socket fechado ou fim de ficheiro). Uma implementação pode devolver menos bytes do que o solicitado, mesmo que o fim do fluxo não tenha sido atingido.

Usar BinaryReader para ler tipos de dados primitivos.

Aplica-se a

Read(Byte[], Int32, Int32)

Quando sobreposto numa classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo 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[]

Um conjunto de bytes. Quando este método regressa, o buffer contém o array de bytes especificado com os valores entre offset e (offset + count - 1) substituídos pelos bytes lidos da fonte atual.

offset
Int32

O deslocamento de bytes baseado em zero em buffer que começar a armazenar os dados lidos do fluxo atual.

count
Int32

O número máximo de bytes a ser lido do fluxo atual.

Devoluções

O número total de bytes lidos no buffer. Isto pode ser inferior ao número de bytes solicitados se esse número de bytes não estiver disponível neste momento, ou zero (0) se count for 0 ou se o fim do fluxo tiver sido atingido.

Exceções

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

buffer é null.

offset ou count é negativo.

Ocorre um erro de E/S.

O stream não suporta leitura.

Os métodos foram chamados após o encerramento do riacho.

Exemplos

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

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

Observações

Use a CanRead propriedade para determinar se a instância atual suporta leitura. Use o ReadAsync método para ler assíncronamente a partir do fluxo atual.

As implementações deste método leem um máximo de count bytes do fluxo atual e armazenam-nos buffer a partir de .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 mantém-se inalterada. As implementações devolvem o número de bytes lidos. Se forem solicitados mais de zero bytes, a implementação não completará a operação até que pelo menos um byte de dados possa ser lido (algumas implementações podem igualmente não concluir até que pelo menos um byte esteja disponível, mesmo que tenham sido solicitados zero bytes, mas nesse caso nenhum dado será consumido do fluxo). Read retorna 0 apenas se foram solicitados zero bytes ou quando não há mais dados no fluxo e não se espera mais (como um socket fechado ou fim de ficheiro). Uma implementação pode devolver menos bytes do que o solicitado, mesmo que o fim do fluxo não tenha sido atingido.

Usar BinaryReader para ler tipos de dados primitivos.

Ver também

Aplica-se a