Ler todas as entradas padrão em uma matriz de bytes Java

Qual é a maneira mais simples em Java moderno (usando apenas as bibliotecas padrão) para lertudo de entrada padrão até EOF em uma matriz de bytes, de preferência sem ter que fornecer essa matriz a si mesmo? Os dados stdin são coisas binárias e não vêm de um arquivo.

Ou seja algo como Ruby

foo = $stdin.read

A única solução parcial que pude pensar foi ao longo das linhas 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);

... mas isso parece bizarramente detalhado até mesmo para Java e usa um buffer de tamanho fixo.