Смысл этой задачи в том, видимо, чтобы пояснить один момент с методом write(), вызванном на объекте OutputStream. На самом деле туда нельзя записать тип int, потому что значение будет приведено в типу byte в конечном счёте. Отсюда следует, что нужно int-значение разделить на байты, то есть на 4 части. Как разделить int на байты я разобрался, написав такой метод:
public static byte[] intToBytes(int value){
        byte[] bytes = new byte[4];
        bytes[0] = (byte)value;
        bytes[1] = (byte)(value >> 8);
        bytes[2] = (byte)(value >> 16);
        bytes[3] = (byte)(value >> 24);
        return bytes;
    }
Однако, с обратным преобразованием байтов в int есть недопонимание. Способ "склейки" байтов в int я нашёл, вот он:
public static int intFromBytes(byte[] bytes){
       if (bytes.length != 4)
           throw new IllegalArgumentException();

       int value = ((bytes[3] & 0xFF) << 24) + ((bytes[2] & 0xFF) << 16) + ((bytes[1] & 0xFF) << 8) + (bytes[0] & 0xFF);
       return value;
   }
Что не понятно: почему операция & 0xFF приводит в обнулению старших битов? Вот скрин из дебагера:
Насколько я знаю, 1 & 1 = 1, а на деле (скрин) получается 0. Не понятно, почему это так? Пояснение к скрину: первые 4 байта - исходные данные следующие 4 байта - результат, полученный в методе выше (с операцией & 0xFF) последние 4 байта - результат, полученный в том же методе, только без операции & 0xFF ДОПОЛНИТЕЛЬНОЕ ПОЯСНЕНИЕ Я знаю, что есть PrintWriter(), который решает данную задачу. Вопрос вообще не в том, как задачу решить, а в том, почему 0xFF приводит в обнулению старших битов?