De la documentación de InputStream (
http://java.sun.com/j2se/1.4.2/docs/...eam.html#read())
Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
O sea, cuando ya no hay bytes disponibles que leer, el método read devuelve -1; por eso se establece esa condicional en el bucle while.
Saludos, espero sea de ayuda,