Olá,
alguém saberia me explicar porque o método available() da classe InputStream “retorna um estimativa do número de bytes que podem ser lidos” e não o número exato e confiável de bytes existentes para serem lidos?
Além disso existe a recomendação:
“It is never correct to use the return value of this method to allocate a buffer intended to hold all data in this stream.”
Por que?
Obrigado
InputStream pode ser um SocketInputStream, por exemplo, onde available não faz sentido nenhum - isso porque o número de bytes que pode ser lido de um socket é virtualmente infinito, se ele ficar aberto direto. Ele só faz sentido, por exemplo, em um FileInputStream (isso se não houver algum outro processo escrevendo nesse mesmo arquivo enquanto você está lendo dele).
Dica: evite usar available. Em vez disso, use um buffer fixo, e tente ler usando “read”. Pegue o número de bytes lidos, que é o retorno de read, e use no seu algoritmo. Pode ser que haja mais bytes, portanto você pode ir repetindo o “read”. Se você tem algo que pode aumentar (por exemplo, um socket ou então um arquivo onde outro processo está escrevendo e autmentando o arquivo), então pode até ser que você leia menos bytes que o tamanho do buffer em algum read, e alguns momentos depois você tente usar read de novo e ele retorne mais bytes.