Этот код, вероятно, взят из кода C (или был написан программистом C, который не разбирает Java так, как это делает Эриксон). Это связано с тем, что в Java приведение типа с большим количеством информации к типу с меньшим количеством информации отбросит биты более высокого порядка, и, следовательно, & 0xff не требуется в обоих случаях.
Сокращение имеет 16 битов, два байта. Поэтому в байтовом массиве нужно занять два слота, потому что, если мы просто бросим короткое замыкание в байт, один байт будет потерян.
Итак, ваш код делает
1110001100001111 sample
0000000011111111 0xff
0000000000001111 sample & 0xff => first byte`
Затем смещает семпл, чтобы получить второй байт
0000000011100011 sample >> 8
0000000011111111 0xff
0000000011100011 (sample >> 8 ) & 0xff => second byte
Что может быть лучше написано, как показано ниже на примере Эриксона (надеюсь, скоро будет).