BufferedStream.Read(Byte[], Int32, Int32) Método

Definição

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(byte[] array, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (array As Byte(), offset As Integer, count As Integer) As Integer

Parâmetros

array
Byte[]

O buffer para o qual os bytes devem ser copiados.

offset
Int32

O deslocamento de bytes no buffer no qual começar a ler bytes.

count
Int32

O número de bytes a serem lidos.

Retornos

O número total de bytes lidos em array. Isso pode ser menor do que o número de bytes solicitados se muitos bytes não estiverem disponíveis no momento ou 0 se o final do fluxo tiver sido atingido antes que qualquer dado possa ser lido.

Exceções

O comprimento de array menos offset é menor que count.

array é null.

offset ou count é negativo.

O fluxo não está aberto ou está null.

O fluxo não dá suporte à leitura.

Os métodos foram chamados 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;

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, Reado 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.

Aplica-se a

Confira também