我注意到在两个用于生成文件哈希的应用程序中,一个用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();
任何提示?
感谢。
答案 0 :(得分:1)
将缓冲区的大小减小到1024字节后,问题就消失了。 不知道确切的解释,但可能是因为有更频繁的读取,DVD驱动程序不会降低驱动器的速度。
感谢您的评论
答案 1 :(得分:0)
我猜测Java代码将DVD视为文件系统上的常规文件,而Windows可能会优化读/写。
由于Java IO调用转到本机/ OS调用,我猜测在执行IO调用以读取DVD时,Linux操作系统更智能。