Почему неверно считается сумма байтов?

Нужно посчитать сумму входящих байтов. Вроде код пишу со всеми рекомендациями.

Почему дает неверный ответ? Объясните пожалуйста где у меня ошибка.

import java.io.IOException;
import java.io.InputStream;
import java.io.ByteArrayInputStream;

public class Program
{
    public static void main(String[] args) throws IOException  {
        byte[] input = {5, 17, 9, 30};
        int b = 61;
        InputStream inputStream = new ByteArrayInputStream(input);
        int result = sumOfStream(inputStream);
        System.out.println(result);
        System.out.println(b == result);
    }
    public static int sumOfStream(InputStream inputStream) throws IOException {
        int hSum = 0;
        int nByte = inputStream.read();
        while ((nByte = inputStream.read()) != -1) {
        int x = (byte) nByte;
        hSum = hSum + x;
         nByte = inputStream.read();
        }    
        return hSum;
        }
}

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

Автор решения: AlekseiGaile
public static int sumOfStream(InputStream inputStream) throws IOException {
    int hSum = 0;
    int nByte;
    while ((nByte = inputStream.read()) != -1) {
        int x = (byte) nByte;
        hSum = hSum + x;
    }
    return hSum;
}

Каждый раз когда вы пишете int nByte = inputStream.read() вы считываете следующее значение из массива, поэтому метод и работает неправильно.

→ Ссылка
Автор решения: Roman C

Потому, что при чтении из потока, не все значения считаются. Лишнее чтение перед циклом и в конце цикла. Вот как должна выглядеть функция

public static int sumOfStream(InputStream inputStream) throws IOException {
        int hSum = 0;
        int nByte;
        while ((nByte = inputStream.read()) != -1) {
            hSum+=nByte;
        }    
        return hSum;
}
→ Ссылка