1
2
没有更好的方法来编写大量文件。您所做的工作本质上是I/O密集型的。 更新 -我认为迈克尔·安德森是对的。使用多个线程来写入文件(可能)将大大加快速度。然而,从几个方面来看,I/O仍然是最终的瓶颈:
除非写入每个文件的数据量很大(每个文件有几千字节),否则我怀疑使用NIO、直接缓冲区、JNI等技术是否值得。真正的瓶颈将在内核:文件系统操作和低级磁盘I/O。
否。您需要创建一个新的
然而,这。。。
…看起来很奇怪。您似乎是:
有什么好处?字符串的意义是什么->字节->字符串转换? 我会这样做:
这应该更快,尽管我不认为加速百分比会那么大。 |
2
1
我想你是在走最快的路。因为每个人都知道最快是最好的;) 一个简单的方法是使用一堆线程来为您写作。 但是,除非您的文件系统能够很好地扩展,否则这样做不会带来太多好处。(我在基于Luster的集群系统上使用这一技术,在“大量文件”可能意味着10k的情况下,在这种情况下,许多写入将被发送到不同的服务器/磁盘) 代码应该是这样的:(注意,我认为这个版本不正确,因为对于少量的文件,这会填充工作队列-但无论如何,请查看下一个版本以获得更好的版本…)
更好的方法是,当你有第一个文件的数据时,就开始写文件,而不是当你有了所有文件的数据后,这样写就不会阻塞计算线程。 要做到这一点,您将应用程序分成几个部分,通过(线程安全)队列进行通信。 代码最终看起来更像这样:
注意,我没有提供队列类的实现,您可以轻松地包装标准的java线程安全类以获得所需的内容。 还有很多事情可以做,以减少延迟等-这是我用来降低时间的一些进一步的事情。。。
|
sp_user123 · 编写大量文件的最佳方法 9 年前 |
gangwerz · 引发IOException后找不到文件 9 年前 |
user2184598 · Java文件输入流 11 年前 |
liam xu · FileInputStream.read()何时阻止? 11 年前 |
Kaliyug Antagonist · 以非阻塞方式处理文件上传 12 年前 |