```stream.available()``` - это оставшийся размер буфера. В общем случае, определить размер потока невозможно.

Если не использовать ```DataInputStream```, то можно найти конец файла через блочный read. А так, вам придется читать до ```EOF```.