Код из этой статьи:
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 + " ");
}
}package com.javarush.task.task18.task1803;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Самые частые байты
*/
public class Solution {
public Solution() throws IOException {
}
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
FileInputStream f = new FileInputStream(bf.readLine());
int a;
bf.close();
List<Byte> byt = new ArrayList<>();
HashMap<Byte, Integer> m = new HashMap<>();
while(f.available()>0) {
byt.add((byte)f.read());
}
f.close();
for(int i =0; i<byt.size(); i++) {
a = Collections.frequency(byt,byt.get(i));
m.put(byt.get(i),a);
}
if(!m.isEmpty()) {
int max = Collections.max(m.values());
for(Map.Entry<Byte,Integer> p: m.entrySet()) {
if(p.getValue()==max)
System.out.print(p.getValue()+ " ");
m.remove(p.getValue());
}
}
}
}