在Java和.Net中读取DVD非常慢

时间:2009-09-04 11:54:21

标签: c# java windows performance dvd

我注意到在两个用于生成文件哈希的应用程序中,一个用Java编写,另一个用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();

任何提示?

感谢。

2 个答案:

答案 0 :(得分:1)

将缓冲区的大小减小到1024字节后,问题就消失了。 不知道确切的解释,但可能是因为有更频繁的读取,DVD驱动程序不会降低驱动器的速度。

感谢您的评论

答案 1 :(得分:0)

我猜测Java代码将DVD视为文件系统上的常规文件,而Windows可能会优化读/写。

由于Java IO调用转到本机/ OS调用,我猜测在执行IO调用以读取DVD时,Linux操作系统更智能。