1

ファイルのハッシュを生成する 2 つのアプリケーション (1 つは Java で作成され、もう 1 つは C# で作成) で、DVD から読み取るときのパフォーマンスがひどいことに気付きました。Windows XP SP3 を使用しています。ノイズから、一連のブロックを読み取った後もドライブがスピンダウンし続け、読み取りの間に数秒の一時停止が発生することに気付きました。

奇妙なことに、エクスプローラーを使用してファイルをハード ドライブにコピーしたり、md5sum (C で記述されたユーティリティ) を使用したりすると、これは発生しません。また。同じハードウェアを使用して Linux で実行すると、Java アプリケーションは正常に動作します。

private static final byte[] m_buf = new byte[1048576*3];
...
//Using a BufferedInputStream makes no difference
InputStream in = new FileInputStream(file);
while((last_read = in.read(m_buf)) != -1){
    update_hash(m_buf, 0, last_read);           
}
in.close();

ヒントはありますか?

ありがとう。

4

2 に答える 2

1

バッファのサイズを 1024 バイトに減らすと、問題はなくなりました。正確な説明はわかりませんが、おそらく読み取りの頻度が高いため、DVD ドライバーはドライブをスピンダウンしません。

コメントありがとうございます

于 2009-09-04T12:50:42.983 に答える
0

JavaコードはDVDをファイルシステム上の通常のファイルとして扱い、Windowsはおそらく読み取り/書き込みを最適化していると思います。

Java IO 呼び出しはネイティブ/OS 呼び出しに送られるため、DVD を読み取るために IO 呼び出しを行う場合、Linux OS の方が賢いと思います。

于 2009-09-04T13:14:22.770 に答える