Код из этой статьи: http://info.javarush.ru/Joysi/2016/02/18/Побайтовая-работа-с-файлами.html
public class Solution {
    public static void main(String[] args) throws Exception {
        FileInputStream inputStream = new FileInputStream(new BufferedReader(new InputStreamReader(System.in)).readLine());

        long[] arrBytes = new long[256]; //1. Массив для хранения всех встречающихся байт


        int  bufferSize = 64000; //2. Переменная для считывания порциями в 64000 байт
        byte buffer[]   = new byte[64000]; //3. Массив для хранения 64000 байт

        while (inputStream.available() > 0) {
            if (inputStream.available() < 64000) bufferSize = inputStream.available(); //4. Если кол-во доступных байт меньше 64000, присваиваю переменной
// bufferSize это значение
            inputStream.read(buffer, 0, bufferSize ); //5. Тут происходит считывание, но как ?
            for (int i = 0; i <bufferSize ; i++) arrBytes[ buffer[i] & 0b11111111 ]++; // 6. Пока  работает цикл, в массив arrBytes будет добавляться бит
        }

                inputStream.close();
        // Выводим отсортированный по байт-коду в обратном порядке
        for (long i = 255; i >= 0 ; i--)
            if (arrBytes[(int) i] > 0) System.out.print(i + " ");


    }
}