Tamanho de um InputStream

8 respostas
V

Alguem sabe como pegar o tamanho em bytes de um InputStream?

8 Respostas

T

Não há como saber, porque uma InputStream pode ter tamanho indefinido (pense em um socket recebendo continuamente dados).

V

Pois é, mas não teria alguma forma de converter esse InputStream em algo definido que possua um tamanho fixo?

É que estou usando o método setBinaryStream() do PreparedStatement e preciso passar um tamanho para gravar um InputStream e não sei como estipular.

T

Por que precisaria? Há uma versão que não precisa do comprimento como parâmetro.
setBinaryStream

V

Nem rola, sou obrigado (normas da empresa) a usar uma versão mais antiga que não tem.

T

O que eu faria no seu lugar: se eu soubesse que os dados são sempre pequenos, criaria um ByteArrayOutputStream copiaria o seu InputStream para esse ByteArrayOutputStream.
Então usaria toByteArray() para pegar os bytes e então criaria um ByteArrayInputStream para passar para esse setBinaryStream.

Se os dados forem grandes, então jogaria os dados lidos da InputStream em um arquivo temporário (eca) e faria algo parecido com o que disse acima, só que usando um FileInputStream.

V

Estava olhando aqui no guj mesmo e vi o pessoal falando do método available() da propria InputStream, olhei na documentação, mas não coompreendi muito bem, “Retorna o número de bytes que podem ser lidos ou ignorado”
testei com ele, deu certo, mas não sei a questão de espaço que ele esta alocando no banco, se é o tamanho atual do inputStream, ou o tamanho que ele pode chegar.

P

o available vai depender da implementacao: num FileInputStream ele vai te dar o numero de bytes que ainda faltam ser lidos com precisao. Ja para um socket, vai dizer quanto voce consegue ler, mas pode ser, e é provavel, que mais bytes estejam chegando da maquina remota!

V

Hum, bom saber, no meu caso seria um FileInputStream, olhei aqui no banco de dados e ele ficou com o mesmo tamanho do arquivo original, acho que a priori meu problema esta resolvido.

Valeu pela ajuda de vocês…

Criado 15 de abril de 2008
Ultima resposta 15 de abr. de 2008
Respostas 8
Participantes 3