Compartilhar via


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

Definição

Lê uma sequência de bytes do fluxo OracleBFile atual de forma assíncrona e avança a posição no fluxo até o número de bytes lidos.

public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides 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) 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

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 se o final do arquivo tiver sido atingido.

Exceções

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

buffer é uma referência nula (Nothing no Visual Basic).

offset ou count é negativo.

A conexão com a qual um BFILE está associado está fechada.

Ocorreu um erro de E/S.

Os métodos foram chamados depois que o fluxo foi fechado ou descartado.

Comentários

O Read método lê um máximo de count bytes do fluxo atual e os armazena no início em bufferoffset. 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. Read retorna o número de bytes lidos. O valor retornado será zero somente se a posição estiver atualmente no final do fluxo. Read bloqueará até que pelo menos um byte de dados possa ser lido, caso nenhum dado esteja disponível. Read retorna 0 somente quando o final do arquivo for atingido. Read é livre para retornar menos bytes do que o solicitado, mesmo que o final do fluxo não tenha sido atingido.

Qualquer tentativa de acessar um fechado OracleBFile usando os Read métodos ou Seek reabre um OracleBFile fluxo automaticamente.

O exemplo de C# a seguir pressupõe esse esquema em uma tabela Oracle:

(col1 number, col2 BFILE)  

O exemplo demonstra o uso dos Read métodos e Seek para acessar um OracleBFile objeto .

byte[] buffer = new byte[100];  
OracleDataReader dataReader = command.ExecuteReader();  
using (dataReader) {  
    if (dataReader.Read()) {  
            OracleBFile BFile = dataReader.GetOracleBFile(1);  
        using (BFile) {  
            BFile.Seek(0, SeekOrigin.Begin);  
            BFile.Read(buffer, 0, 100);  
        }  
    }  
}  

Aplica-se a