Как подсчитать количество целых чисел в этом файле с помощью Java?

Если у меня есть файл .dat, который я пытаюсь прочитать, как я могу подсчитать количество 32-битных целых чисел? Я получаю 2 разных ответа двумя разными способами.

Первый способ:

int size = 0;
try (DataInputStream Input = new DataInputStream(
        new BufferedInputStream(new FileInputStream(file.getFD())))){
    while (true) {
        file.skipBytes(4);
        size += 1;
    }
}catch(Exception ex){
    System.out.println(ex);
}
System.out.println(size);

Второй способ:

File fileRead = new File(file);
ret = fileRead.length() / 4

Первый метод, вероятно, является наиболее точным, поскольку я каждый раз читаю 4 байта и пропускаю его, чтобы получить размер целых чисел, последовательно упаковываемых в файл. Однако второй метод просто дает мне прямой размер файла и делится на 4, что не то же самое. Я думаю, это может быть включение дополнительных данных, связанных с файлом, не связанных с контентом.

Первый способ хорош, но очень неэффективен для больших файлов. Есть идеи, как я могу ускорить процесс и эффективно получить количество целых чисел?

Вы можете «токенизировать» строки, пока читаете их - при условии, что это «текстовый» файл; оцените токены до обнаружить, если это целое число или нет ... затем подсчитайте вхождения.

x80486 08.09.2018 19:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
198
1

Ответы 1

Если вы хотите много раз знать, можете ли вы прочитать 32-битное целое число из определенного файла двоичный, метод 2 - верный ответ.

Вы не должны читать свой файл через DataInputStream, если не уверены, что он был записан через DataOutputStream, потому что тогда это не просто простой двоичный файл: вместо этого он становится Файл объекта Java, который будет содержать много служебных данных с каждым записанным объектом.

Не могли бы вы объяснить, почему у двух подходов разный размер? Я полагаю, что для двоичного файла фактический размер файла, вероятно, содержит данные, которые не являются частью содержимого, поэтому фактическое количество прочитанных 32-битных целых чисел может быть меньше?

winnie99 10.09.2018 09:14

Прежде всего: каков формат файла? Содержит ли он простые 32-битные слова или сериализованные объекты Java?

Little Santi 10.09.2018 16:15

Другие вопросы по теме