f.read(b)
приводит к целому числу длины 1 или одному байту.
System.err
находит окно с ошибкой и затем помещает туда сообщение, так же, как System.out
находит окно консоли и затем помещает туда сообщение.
new String(b,0,n)
будет использовать конструктор String (byte [] bytes, int offset, int length) для создания строки с байтовым массивом b, начиная со смещения 0 и имея длину n.