|
|
1
2
|
|
2
6
什么文件?基于文本,比如csv? 最简单的方法是像grep那样做:逐行读取文件,解析该行,检查筛选条件,如果匹配,输出结果行,然后转到下一行,直到文件完成。这是非常节省内存的方法,因为您只需要同时加载当前行(或稍大一点的缓冲区)。您的过程只需要读取整个文件一次。 我认为多线程不会有多大帮助。这将使事情变得更加复杂,而且由于进程似乎是I/O绑定的,因此尝试用多个线程读取同一个文件可能不会提高吞吐量。 如果您发现需要经常这样做,并且每次浏览文件的速度太慢,那么您需要构建某种索引。最简单的方法是先将文件导入数据库(可以是像sqlite或hsql这样的嵌入式数据库)。 |
|
|
3
5
除非你发现这种简单的方法不能满足你的需要,否则我不会对此做过多的解释。基本上你只需要:
在我的一个具有非常普通硬件的测试系统上,BufferedInputStream在25秒内读取大约500 MB,也就是说,处理2GB文件可能不到2分钟,默认缓冲区大小基本上与实际大小相同(请参见 BufferedInputStream timings 我做了更多的细节)。我想,有了最先进的硬件,时间可能会减少一半。 无论你是需要花费大量的精力来减少2/3分钟,还是在等待它运行的时候花一点时间,这都是你必须根据自己的需求做出的决定。我认为数据库选项不会给您带来太多好处,除非您需要在同一组数据上执行大量不同的处理运行(而且还有其他解决方案不会自动意味着数据库)。 |
|
|
4
0
我想你应该用 memory mapped 文件。这将帮助您将较大的文件映射到 较小的内存。这将像虚拟内存一样,就性能而言,映射文件比流写入/读取更快。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |