2012-03-13 114 views
0

我想不断将数据写入光盘。 我想经常刷新数据到光盘(例如每个64MB的块)。你可以提出什么解决方案?频繁刷新的优化()

我认为标准OutputStream可能比nio.channels更好的选择,因为它更直接。

+0

也许你可以提供一个例子(你到目前为止做了什么)? – home 2012-03-13 20:41:13

+0

我尝试在每次写入之后使用nio.channel.write()和force()。每个写入都是固定的大小(例如64MB)。在这一刻我正在测试FileOutputStream.write()和FileOutputStream.flush()的性能 – olwe 2012-03-13 20:48:37

+0

当我在每次写入性能下降60-70%后使用force()时 – olwe 2012-03-13 20:50:56

回答

1

如果您正在编写连续的数据流,例如追加到文件的末尾,则定期调用与flush()偶尔调用同样好或比nio更好。 nio可以给你一个很大的优势,将写在文件的不同区域的许多小块。在这种情况下,您可以使用内存映射文件,这可以是对旧式写入的改进。但是,从我所了解的问题来看,您正在处理连续的数据流。我建议你实施常规的解决方案,让你找到更好的代码,并且只有在发现性能欠佳时才寻找替代方案。在这种情况下,我不希望nio明显的差异。

+0

我正在写一个连续的数据流到一个固定大小的块的文件末尾,并且在**同时**我从文件中的其他位置读取连续的块。阅读和写作都非常重要。 – olwe 2012-03-13 21:16:41

+0

如果你一次从一个地方读书,并且访问来自连续的位置,那么使用旧的'io'软件包仍然可以。 – 2012-03-13 21:19:37