Подтвердить что ты не робот

Открытие большого файла на Java очень медленно

У меня есть большой (12GB) файл, и мне нужно извлечь из него небольшие фрагменты данных (несколько килобайт каждый), используя Java. Поиск и чтение данных после открытия файла происходит очень быстро, но открытие самого файла занимает длительное время - около 90 секунд. Есть ли способ ускорить работу открытого файла в Java?

Чтобы уточнить, я попробовал следующие параметры, чтобы открыть и прочитать файл:

new FileInputStream(file); 
new RandomAccessFile(file, "r");
Files.newByteChannel(path, StandardOpenOption.READ);

Каждый из них дал аналогичные результаты.

4b9b3361

Ответ 1

Из коммитов: Чтобы быть конкретным, проблема в том, что работа с открытым файлом Java запускает операцию ОС, которая запускает проверку на вирусы, и решение заключается в том, чтобы добавить Java в список доверенных процессов.

Ответ 2

Проблема, с которой вы столкнулись, в основном вызвана JNI, который вы используете.

Как ваш код ждет в течение конструктора для FileInputSream (String). Это очень важно для существования пройденного пути и вызовите метод private native void open(String).

Затем openJDK-реализация FileInputSream # open (String) выглядит следующим образом:

    JNIEXPORT void JNICALL
    Java_java_io_FileInputStream_open(JNIEnv *env, jobject this, jstring path) {
        fileOpen(env, this, path, fis_fd, O_RDONLY);
    }

Это приведет нас к io_util_md.c и методу

jlong winFileHandleOpen(JNIEnv *env, jstring path, int flags)

Вы можете проанализировать код там.


В этот момент у вас есть различные варианты.

  • Проверьте различные JDK
  • Напишите код C, чтобы создать метод JNI.
  • Проверьте файловую систему differnet.