Ответ 1
Из коммитов: Чтобы быть конкретным, проблема в том, что работа с открытым файлом Java запускает операцию ОС, которая запускает проверку на вирусы, и решение заключается в том, чтобы добавить Java в список доверенных процессов.
У меня есть большой (12GB) файл, и мне нужно извлечь из него небольшие фрагменты данных (несколько килобайт каждый), используя Java. Поиск и чтение данных после открытия файла происходит очень быстро, но открытие самого файла занимает длительное время - около 90 секунд. Есть ли способ ускорить работу открытого файла в Java?
Чтобы уточнить, я попробовал следующие параметры, чтобы открыть и прочитать файл:
new FileInputStream(file);
new RandomAccessFile(file, "r");
Files.newByteChannel(path, StandardOpenOption.READ);
Каждый из них дал аналогичные результаты.
Из коммитов: Чтобы быть конкретным, проблема в том, что работа с открытым файлом Java запускает операцию ОС, которая запускает проверку на вирусы, и решение заключается в том, чтобы добавить Java в список доверенных процессов.
Проблема, с которой вы столкнулись, в основном вызвана 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)
Вы можете проанализировать код там.
В этот момент у вас есть различные варианты.