1

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

有什么提示吗?

谢谢。

4

2 回答 2

1

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

感谢您的评论

于 2009-09-04T12:50:42.983 回答
0

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

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

于 2009-09-04T13:14:22.770 回答