Lettura di un stream di input binario in un array di byte singolo in Java

La documentazione dice che non si dovrebbe usare il metodo available() per determinare la dimensione di un InputStream . Come posso leggere l’intero contenuto di un InputStream in un array di byte?

 InputStream in; //assuming already present byte[] data = new byte[in.available()]; in.read(data);//now data is filled with the whole content of the InputStream 

Potrei leggere più volte in un buffer di dimensioni fisse, ma poi, dovrò combinare i dati che ho letto in un array di byte singolo, che è un problema per me.