2009-09-04 14 views
1

2つのアプリケーションでファイルのハッシュ(Javaで書かれたものとC#で書かれたもの)を生成したことに気付きました。私はWindows XP SP3を使用しています。私は騒音から、ドライブがブロックの束を読んだ後に回転を止め続け、読書の間に数秒の休止を引き起こすことに気づいた。Javaと.NetのDVDからの読み込みが非常に遅い

奇妙なことに、私はエクスプローラを使ってハードドライブにファイルをコピーするときや、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(); 

ヒント?

ありがとうございました。

+0

あなたは読む方法をいくつか記入できますか? – RvdK

+0

ハッシュ関数を取り除き、ちょうどコピービットを計る。 –

+0

あなたはバッファサイズを増減しようとしましたか? –

答えて

1

バッファのサイズを1024バイトに縮小した後、問題は消えました。 正確な説明はわかりませんが、DVDドライバが頻繁に読み込みを行うため、ドライブがスピンダウンしない可能性があります。コメントの

おかげ

0

は、私は、Windowsはおそらくリード/ライトを最適化しながら、Javaコードは、ファイルシステム上の通常のファイルとしてDVDを扱うことを推測しています。

Java IOコールはネイティブ/ OSコールになるので、DVDを読むためにIOコールを行うときにLinux OSがよりスマートになると推測しています。

関連する問題