BufferedStream.Read Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Sobrecargas
Read(Span<Byte>) |
Copia bytes do fluxo em buffer atual para um intervalo de bytes e avança a posição no fluxo em buffer até o número de bytes lidos. |
Read(Byte[], Int32, Int32) |
Copia bytes do fluxo em buffer atual para uma matriz. |
Read(Span<Byte>)
- Origem:
- BufferedStream.cs
- Origem:
- BufferedStream.cs
- Origem:
- BufferedStream.cs
Copia bytes do fluxo em buffer atual para um intervalo de bytes e avança a posição no fluxo em buffer até o número de bytes lidos.
public:
override int Read(Span<System::Byte> destination);
public override int Read (Span<byte> destination);
override this.Read : Span<byte> -> int
Public Overrides Function Read (destination As Span(Of Byte)) As Integer
Parâmetros
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
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 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 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.
Aplica-se a
Read(Byte[], Int32, Int32)
- Origem:
- BufferedStream.cs
- Origem:
- BufferedStream.cs
- Origem:
- BufferedStream.cs
Copia bytes do fluxo em buffer atual para uma matriz.
public:
override int Read(cli::array <System::Byte> ^ array, int offset, int count);
public:
override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] array, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (array As Byte(), offset As Integer, count As Integer) As Integer
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer
Parâmetros
- arraybuffer
- Byte[]
O buffer para o qual os bytes devem ser copiados.
- offset
- Int32
O deslocamento de bytes no buffer no qual será iniciada a leitura de bytes.
- count
- Int32
O número de bytes a serem lidos.
Retornos
O número total de bytes lidos no array
. Isso poderá ser menor que o número de bytes solicitado se esses muitos bytes não estiverem disponíveis no momento ou 0 se o final do fluxo tiver sido atingido antes que os dados possam ser lidos.
Exceções
O tamanho de array
menos offset
é menor que count
.
array
é null
.
offset
ou count
é negativo.
O fluxo não está aberto ou é null
.
Não há suporte para leitura no fluxo.
Foram chamados métodos depois que o fluxo foi fechado.
Exemplos
Este exemplo de código faz parte de um exemplo maior fornecido para a BufferedStream classe .
// Receive data using the BufferedStream.
Console::WriteLine( "Receiving data using BufferedStream." );
bytesReceived = 0;
startTime = DateTime::Now;
while ( bytesReceived < numberOfLoops * receivedData->Length )
{
bytesReceived += bufStream->Read( receivedData, 0, receivedData->Length );
}
bufferedTime = (DateTime::Now - startTime).TotalSeconds;
Console::WriteLine( "{0} bytes received in {1} seconds.\n", bytesReceived.ToString(), bufferedTime.ToString( "F1" ) );
// Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.");
bytesReceived = 0;
startTime = DateTime.Now;
int numBytesToRead = receivedData.Length;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to numBytesToRead.
int n = bufStream.Read(receivedData,0, receivedData.Length);
// The end of the file is reached.
if (n == 0)
break;
bytesReceived += n;
numBytesToRead -= n;
}
bufferedTime = (DateTime.Now - startTime).TotalSeconds;
Console.WriteLine("{0} bytes received in {1} seconds.\n",
bytesReceived.ToString(),
bufferedTime.ToString("F1"));
// Receive data using the BufferedStream.
printfn "Receiving data using BufferedStream."
bytesReceived <- 0
let startTime = DateTime.Now
let mutable numBytesToRead = receivedData.Length
let mutable broken = false
while not broken && numBytesToRead > 0 do
// Read may return anything from 0 to numBytesToRead.
let n = bufStream.Read(receivedData,0, receivedData.Length)
// The end of the file is reached.
if n = 0 then
broken <- true
else
bytesReceived <- bytesReceived + n
numBytesToRead <- numBytesToRead - n
let bufferedTime = (DateTime.Now - startTime).TotalSeconds
printfn $"{bytesReceived} bytes received in {bufferedTime:F1} seconds.\n"
' Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.")
bytesReceived = 0
startTime = DateTime.Now
Dim numBytesToRead As Integer = receivedData.Length
Dim n As Integer
Do While numBytesToRead > 0
'Read my return anything from 0 to numBytesToRead
n = bufStream.Read(receivedData, 0, receivedData.Length)
'The end of the file is reached.
If n = 0 Then
Exit Do
End If
bytesReceived += n
numBytesToRead -= n
Loop
bufferedTime = DateTime.Now.Subtract(startTime).TotalSeconds
Console.WriteLine("{0} bytes received in {1} " & _
"seconds." & vbCrLf, _
bytesReceived.ToString(), _
bufferedTime.ToString("F1"))
Comentários
O Read
método retornará 0 somente se o final do fluxo for atingido. Em todos os outros casos, Read
sempre lê pelo menos um byte do fluxo antes de retornar. Por definição, se nenhum dado estiver disponível no fluxo após uma chamada para Read
, o Read
método retornará 0 (o final do fluxo será atingido automaticamente). 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
- BlockCopy(Array, Int32, Array, Int32, Int32)
- CanRead
- Write(Byte[], Int32, Int32)
- E/S de arquivo e de fluxo
- Como ler texto de um arquivo
- Como gravar texto em um arquivo