13

大きな (12GB) ファイルがあり、Java を使用して小さなデータ (それぞれ数キロバイト) を抽出する必要があります。ファイルが開かれると、データの検索と読み取りは非常に高速ですが、ファイルを開くのに約 90 秒かかりますJavaでファイルを開く操作を高速化する方法はありますか?

明確にするために、ファイルを開いて読み取るために次のオプションを試しました。

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

これらのそれぞれは、同様の結果をもたらしました。

4

2 に答える 2

10

コメントより: 具体的には、問題は Java のファイルを開く操作がウイルス スキャンを実行する OS 操作をトリガーすることであり、解決策は Java を信頼できるプロセスのリストに追加することです。

于 2012-12-10T15:47:49.857 に答える
1

あなたが抱えている問題は、ほとんどの場合、使用している JNI が原因です。

FileInputSream(String) のコンストラクター中にコードが待機するため。渡されたパスの存在を確認し、メソッドを呼び出しますprivate native void open(String)

次に、 FileInputSream#open(String)の openJDK 実装は次のようになります。

    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 コードを記述して、onw JNI メソッドを作成します。
  • 差分ファイル システムを確認します。
于 2012-12-10T12:13:45.593 に答える