Na seção anterior, aprendemos como construir um fluxo de entrada de bytes de arquivo. Nesta seção, continuamos a aprender como usar o fluxo de entrada para ler bytes e fechar o fluxo.
O objetivo do fluxo de entrada é fornecer um canal para leitura de dados da fonte. O programa pode ler os dados da fonte por meio deste canal. O fluxo de bytes do arquivo pode chamar o método de leitura herdado da classe pai para ler o arquivo sequencialmente. , desde que o fluxo não seja fechado. Cada chamada ao método read lê sequencialmente o conteúdo restante do arquivo até que o final do arquivo ou o fluxo de entrada de bytes do arquivo seja fechado.
O método read do fluxo de entrada de bytes lê os dados na fonte em bytes.
O fluxo de entrada chama esse método para ler um único byte de dados da origem. Esse método retorna o valor do byte (um número inteiro entre 0 e 255).
O fluxo de entrada chama esse método para tentar ler bytes b.length da origem na matriz de bytes b e retorna o número real de bytes lidos. Se o final do arquivo for atingido, -1 será retornado.
O fluxo de entrada chama esse método para tentar ler len bytes da origem na matriz de bytes b e retorna o número real de bytes lidos. Se o final do arquivo for atingido, -1 será retornado e o parâmetro off especifica uma posição na matriz de bytes para iniciar o armazenamento dos dados lidos.
Nota : O fluxo FileInputStream lê o arquivo sequencialmente, desde que o fluxo não seja fechado, cada chamada para o método read lê o restante do conteúdo de origem sequencialmente até o final da fonte ou do fluxo ser fechado.
Todos os fluxos de entrada fornecem um método de fechamento close() . Embora todos os fluxos abertos sejam fechados automaticamente quando o programa terminar, ainda é um bom hábito fechar explicitamente quaisquer fluxos abertos após o programa terminar de usar o fluxo. Se os fluxos abertos não forem fechados, outro programa poderá não ter permissão para manipular os recursos usados por esses fluxos.
Por exemplo:
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){intn=-1;byte[]a=newbyte[100];try{Filef=newFile(Main.java);InputStreamin=newFileInputStream(f);while( (n=in.read(a,0,100))!=-1){Strings=newString(a,0,n);System.out.print(s);}in.close();}catch(IOExceptione) {System.out.println(FilereadError+e);}}}
Nota : Ao converter os bytes lidos em uma string, os bytes lidos reais devem ser convertidos em uma string, como no exemplo acima:
Strings=novaString(a,0,n);
não pode ser escrito como:
Strings=novaString(a,0,100);