Java-多线程下高效复制文件
在固定线程池大小的情况下,如何高效的将A目录下的所有文件复制到B目录下?
可以只说思路,不用上代码的!有代码更好!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在固定线程池大小的情况下,如何高效的将A目录下的所有文件复制到B目录下?
可以只说思路,不用上代码的!有代码更好!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
一个线程一次只做读入或写入操作。
1.一个栈
2.将A目录下面所有文件放入栈中
3.将A目录下面被读入的文件字节数组放入栈中。
把A目录下面所有文件入队列,接下来就是消费者-生产者了,空闲线程去拿文件,然后写到B目录
PC 的话,用 RandomAccessFile 类,有个 Seek 方法,
每个线程找到对应的开始位置,然后开始填充(Write) 即可。
Android 的话,如果 CPU 和内存不够用,还是采用 消费者和生产者 模式比较明智,
实际测量的时候会发现严重的下载速率的稳定性。
要是考虑到代码编写的效率问题,可以采用多线程下载分段,全部下载完成后,再合并文件的方式,这一点上,我习惯上使用后者。
祝好,
斑驳敬上
这个要看文件情况:
1.假如文件数量比较多,文件大小相差不大,可采用下面情况
遍历A目录下的文件,每遍历到一个文件就从线程池中分配一个线程进行文件复制操作。
2.假如文件大小差距很大,有的几十M 有的几十G。
按照1的情况操作增加一个判断,假如文件过大(是否属于大文件,这个标准实际自行设置)可以对于一个文件的拷贝分配多个线程去执行。