Читать все стандартные входные данные в байтовый массив Java

Какой самый простой способ в современной Java (используя только стандартные библиотеки) для чтениявсе стандартный ввод до EOF в байтовый массив, желательно без необходимости самому предоставлять этот массив? Данные stdin - это двоичные данные, а не файлы.

То есть что-то вроде Руби

foo = $stdin.read

Единственное частичное решение, которое я мог придумать, было в духе

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);

... но это кажется странно многословным даже для Java и использует буфер фиксированного размера.

Ответы на вопрос(2)

Ваш ответ на вопрос