Lea todas las entradas estándar en una matriz de bytes Java

¿Cuál es la forma más sencilla en Java moderno (utilizando solo las bibliotecas estándar) para leer?todo entrada estándar hasta EOF en una matriz de bytes, preferiblemente sin tener que proporcionar esa matriz uno mismo? Los datos estándar son binarios y no provienen de un archivo.

Es decir. algo como el de Ruby

foo = $stdin.read

La única solución parcial que pude pensar fue en la línea de

byte[] buf = new byte[1000000];
int b;
int i = 0;

while (true) {
    b = System.in.read();
    if (b == -1)
        break;
    buf[i++] = (byte) b;
}

byte[] foo[i] = Arrays.copyOfRange(buf, 0, i);

... pero eso parece extrañamente detallado incluso para Java, y utiliza un búfer de tamaño fijo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta