forked from int28h/JavaTasks
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0016.java
More file actions
24 lines (24 loc) · 1.57 KB
/
0016.java
File metadata and controls
24 lines (24 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* Напишите метод, читающий входной поток и вычисляющий контрольную сумму прочитанных данных.
*
* Контрольная сумма данных вычисляется по следующему алгоритму:
*
* Контрольная сумма представляет собой число типа int. Контрольная сумма пустого набора данных равна нулю.
* Контрольная сумма непустого набора данных вычисляется по следующей рекуррентной формуле: Cn+1=rotateLeft(Cn) xor bn+1,
* где Cn — контрольная сумма первых n байт данных, rotateLeft — циклический сдвиг бит числа на один бит влево
* (чтобы не изобретать велосипед, используйте Integer.rotateLeft), bn
*
* — n-ный байт данных.
*
* Поскольку метод не открывал данный InputStream, то и закрывать его он не должен.
* Выброшенное из методов InputStream исключение должно выбрасываться из метода.
*/
public static int checkSumOfStream(InputStream inputStream) throws IOException {
int result = 0;
int n = inputStream.read();
while(n > -1) {
result = Integer.rotateLeft(result, 1) ^ n;
n = inputStream.read();
}
return result;
}