Процесс получения одного числового значения и преобразования его в другое без вашей помощи называется повышением. Например, вы берете 1-байтовое число и превращаете его в 4-байтовое число, заполняя нули. Это (как правило) безопасно, поскольку диапазон возможных значений в типе цели больше, чем в типе источника.
Когда происходит обратное, например, взятие целого числа и преобразование в байт, это объявление «понижения», которое не является автоматическим, вы должны форсировать его, так как происходит потеря значения.
Что здесь происходит, так это то, что 27 интерпретируется как int. Само выражение является целым числом, и затем оно отправляется методу, который ожидает байт. Другими словами, тот факт, что вы помещаете его в вызов метода, который принимает байт, не меняет того факта, что Java с самого начала считает, что это немного.
Я не помню точно, как определять байтовые константы в Java, но, вообще говоря, число, подобное 27, является магическим числом. Вы можете написать
final byte MY_CONSTANT_THAT_MEANS_27_BUT_WITH_MEANINGFUL_NAME = 27;
А затем вызовите вашу функцию с этой константой вместо 27.