Не могу понять почему выходит ошибка в коде, тема InputStream и OutputStream

всем хорошего дня! Подскажите, пожалуйста, в чем ошибка в данном коде.

Выходит ошибка: выходной поток оказался пуст, когда этого не ожидалось.

Задание состоит в следующем: Напишите метод void print(InputStream inputStream, OutputStream outputStream) который принимает InputStream и OutputStream, считывает все байты из inputStream и записывает в OutputStream только четные.

Пример ввода: 3, 10, 4, 5, 7

Пример вывода: 10, 4

Мой код:

public class Test {
    public static void main(String[] args) throws IOException {
        InputStream stream = new ByteArrayInputStream(new byte[]{2, -11, 7, 51, 64});
        OutputStream outputStream = new ByteArrayOutputStream();
        print(stream, outputStream);

    }


    public static void print(InputStream inputStream, OutputStream outputStream) throws IOException {
        byte result;
        int i;
        while ((i = inputStream.read()) != -1) {
            if ((result = (byte) i) % 2 == 0) {
               outputStream.write(result);
            }
        }
    }
}

Ответы (2 шт):

Автор решения: instahipsta282

Резюмирую комментарии: Проблема в том, что вы неправильно работаете с IO.

Проблема в задании с тем, что внутри ByteArrayOutputStream зашит буфер, который после записи необходимо "прочищать" с помощью метода flush(), чтобы не потерять еще не записанную информацию.

Вторая проблема в том, что вы не закрываете потоки записи и чтения, что в случае с чтением/записью из массива не ведет к каким-то губительными последствиям, но в общем случае лучше использовать конструкцию try-with-resources, так вы освободитье себя от необходимости самому освобождать ресурсы и делать flush(), все выполнится автоматически после выхода из блока try.

→ Ссылка
Автор решения: Олег Игоревич
public static void print(InputStream inputStream, OutputStream outputStream) throws IOException {
int len = inputStream.read();
    int i =0;
    while (len != -1) {
        if (len % 2 == 0) {
            System.out.println(len);
            outputStream.write(len);
            outputStream.flush();
        }
        len = inputStream.read();
    }
}
→ Ссылка