Compartilhar via


SubStream Classe

  • java.lang.Object
    • InputStream
      • com.microsoft.azure.storage.blob.SubStream

public class SubStream

Resumo do Construtor

Construtor Description
SubStream(InputStream source, long startIndex, long streamLength, Object lock)

Cria uma nova instância de substream que particiona o fluxo encapsulado de até . Cada instância de substream que encapsula o mesmo subjacente deve compartilhar a mesma exclusão mútua para evitar condições de corrida de operações simultâneas.

Resumo do método

Modificador e tipo Método e descrição
void close()

Fecha o substream.

InputStream getInputStream()
long getLength()
synchronized void mark(int readlimit)

Marca a posição atual no substream. Uma chamada subsequente para o método reposicionará o fluxo para essa posição armazenada.

boolean markSupported()

A classe wrapper de substream só é compatível com fluxos de entrada markáveis e, portanto, sempre retornará true. Esse requisito é imposto no construtor de classe.

int read()

Lê o próximo byte de dados do fluxo encapsulado. O byte de valor é retornado como um no intervalo para . Se nenhum byte estiver disponível porque o final do substream foi atingido, o valor será retornado. Esse método bloqueia até que os dados de entrada sejam disponíveis, o final do fluxo seja detectado ou uma exceção seja gerada.

synchronized int read(byte[] b)

Lê alguns bytes do fluxo encapsulado e os armazena na matriz de buffers . O número de bytes realmente lidos é retornado como um inteiro. Esse método bloqueia até que os dados de entrada sejam disponíveis, o fim do arquivo seja detectado ou uma exceção seja gerada.

Se o comprimento de for zero, nenhum bytes será lido e retornado; caso contrário, há uma tentativa de ler pelo menos um byte. Se nenhum byte estiver disponível porque o substream está no final do arquivo, o valor será retornado; caso contrário, pelo menos um byte é lido e armazenado em .

A primeira leitura de byte é armazenada no elemento , a próxima no e assim por diante. O número de bytes lidos é, no máximo, igual ao comprimento de . Deixe k ser o número de bytes realmente lidos; esses bytes serão armazenados em elementos por meio de k, deixando os elementos k por meio de não afetados.

O método para classe tem o mesmo efeito que:

synchronized int read(byte[] b, int off, int len)

Lê até bytes de dados do substream. Armazena em buffer os dados do fluxo encapsulado para minimizar a sobrecarga de ignorar e ler. O wrappedstream só será invocado se o readBuffer não puder atender à solicitação de leitura. Para garantir resultados válidos, o fluxo encapsulado deve ser marcado antes da leitura do subfluxo. Isso nos permite redefinir para a posição relativa do subfluxo no fluxo encapsulado. O número de bytes realmente lidos é retornado como um inteiro. Todas essas operações são feitas de forma síncrona em um bloqueio intrínseco para garantir que outras solicitações simultâneas por instâncias de substream não resultem em condições de corrida.

A chamada subjacente para a leitura do fluxo encapsulado será bloqueada até que os dados de entrada sejam disponibilizados, o fim do arquivo seja detectado ou uma exceção seja gerada.

Se for zero, nenhum bytes será lido e será retornado; caso contrário, há uma tentativa de ler pelo menos um byte. Se nenhum byte estiver disponível porque o subfluxo está no final do arquivo, o valor será retornado; caso contrário, pelo menos um byte será lido e armazenado em .

synchronized void reset()

Reposiciona a posição de subfluxo para o índice em que o método foi chamado pela última vez.

A nova posição de redefinição no subfluxo não terá efeito até as leituras subsequentes.

long skip(long n)

Avança a posição atual do subfluxo por . O método não invoca o método subjacente da classe de fluxo encapsulada. O ignorar bytes real será contabilizado durante as operações de leitura de subfluxo subsequentes.

Detalhes do construtor

SubStream

public SubStream(InputStream source, long startIndex, long streamLength, Object lock)

Cria uma nova instância de substream que particiona o fluxo encapsulado de até . Cada instância de substream que encapsula o mesmo subjacente deve compartilhar a mesma exclusão mútua para evitar condições de corrida de operações simultâneas.

Parameters:

source - O InputStream markable a ser encapsulado.
startIndex - Um índice válido no fluxo encapsulado em que o substream deve começar logicamente.
streamLength - O comprimento do substream.
lock - Um bloqueio intrínseco para garantir operações simultâneas e seguras em threads em instâncias de substream que encapsulam o mesmo InputStream.

Detalhes do método

close

public void close()

Fecha o substream.

getInputStream

public InputStream getInputStream()

getLength

public long getLength()

mark

public synchronized void mark(int readlimit)

Marca a posição atual no substream. Uma chamada subsequente para o método reposicionará o fluxo para essa posição armazenada.

Parameters:

readlimit - o limite máximo de bytes que podem ser lidos antes que a posição da marca se torne inválida.

markSupported

public boolean markSupported()

A classe wrapper de substream só é compatível com fluxos de entrada markáveis e, portanto, sempre retornará true. Esse requisito é imposto no construtor de classe.

Returns:

true

read

public int read()

Lê o próximo byte de dados do fluxo encapsulado. O byte de valor é retornado como um no intervalo para . Se nenhum byte estiver disponível porque o final do substream foi atingido, o valor será retornado. Esse método bloqueia até que os dados de entrada sejam disponíveis, o final do fluxo seja detectado ou uma exceção seja gerada.

Returns:

o próximo byte de dados ou -1 se o final do substream for atingido.

Throws:

IOException - se ocorrer um erro de E/S.

read

public synchronized int read(byte[] b)

Lê alguns bytes do fluxo encapsulado e os armazena na matriz de buffers . O número de bytes realmente lidos é retornado como um inteiro. Esse método bloqueia até que os dados de entrada sejam disponíveis, o fim do arquivo seja detectado ou uma exceção seja gerada.

Se o comprimento de for zero, nenhum bytes será lido e retornado; caso contrário, há uma tentativa de ler pelo menos um byte. Se nenhum byte estiver disponível porque o substream está no final do arquivo, o valor será retornado; caso contrário, pelo menos um byte é lido e armazenado em .

A primeira leitura de byte é armazenada no elemento , a próxima no e assim por diante. O número de bytes lidos é, no máximo, igual ao comprimento de . Deixe k ser o número de bytes realmente lidos; esses bytes serão armazenados em elementos por meio de k, deixando os elementos k por meio de não afetados.

O método para classe tem o mesmo efeito que:

Parameters:

b - o buffer no qual os dados são lidos.

Returns:

o número total de bytes lidos no buffer ou -1 se não houver mais dados porque o final do fluxo foi atingido.

Throws:

IOException - Se o primeiro byte não puder ser lido por qualquer motivo diferente do final do arquivo, se o fluxo encapsulado tiver sido fechado ou se ocorrer algum outro erro de E/S.
NullPointerException - se b for null.

read

public synchronized int read(byte[] b, int off, int len)

Lê até bytes de dados do substream. Armazena em buffer os dados do fluxo encapsulado para minimizar a sobrecarga de ignorar e ler. O wrappedstream só será invocado se o readBuffer não puder atender à solicitação de leitura. Para garantir resultados válidos, o fluxo encapsulado deve ser marcado antes da leitura do subfluxo. Isso nos permite redefinir para a posição relativa do subfluxo no fluxo encapsulado. O número de bytes realmente lidos é retornado como um inteiro. Todas essas operações são feitas de forma síncrona em um bloqueio intrínseco para garantir que outras solicitações simultâneas por instâncias de substream não resultem em condições de corrida.

A chamada subjacente para a leitura do fluxo encapsulado será bloqueada até que os dados de entrada sejam disponibilizados, o fim do arquivo seja detectado ou uma exceção seja gerada.

Se for zero, nenhum bytes será lido e será retornado; caso contrário, há uma tentativa de ler pelo menos um byte. Se nenhum byte estiver disponível porque o subfluxo está no final do arquivo, o valor será retornado; caso contrário, pelo menos um byte será lido e armazenado em .

Parameters:

b - o buffer no qual os dados são lidos.
off - o deslocamento inicial na matriz b na qual os dados são gravados.
len - o número máximo de bytes a serem lidos.

Returns:

o número total de bytes lidos no buffer ou -1 se não houver mais dados porque o final do fluxo foi atingido.

Throws:

IOException - Se o primeiro byte não puder ser lido por qualquer motivo diferente do fim do arquivo ou se o fluxo encapsulado tiver sido fechado ou se ocorrer algum outro erro de E/S.
NullPointerException - Se b for null.
IndexOutOfBoundsException - Se off for negativo, len for negativo ou len for maior que b.length - off

reset

public synchronized void reset()

Reposiciona a posição de subfluxo para o índice em que o método foi chamado pela última vez.

A nova posição de redefinição no subfluxo não terá efeito até as leituras subsequentes.

skip

public long skip(long n)

Avança a posição atual do subfluxo por . O método não invoca o método subjacente da classe de fluxo encapsulada. O ignorar bytes real será contabilizado durante as operações de leitura de subfluxo subsequentes.

Parameters:

n - o número de bytes a serem efetivamente ignorados.

Returns:

o número real de bytes ignorados.

Aplica-se a