:? :? :?
我想处理一些文件的文本数据。是以一定的格式如分隔符分开的。这些文件都挺大的。一个文件应该是30M左右。
里面有一些要求,如某些列需要比较进行数据匹配。比如下面
students_1.txt
(格式为:学号,姓名,年龄,姓别,系别,班级)
100001,小A,20,男,0604,061401
100002,小B,20,女,0604,061401
100003,小C,20,男,0604,061401
100004,小D,20,男,0604,061401
100005,小E,20,女,0604,061401
100006,小F,20,男,0604,061401
100007,小G,20,女,0604,061401
(这是一些模拟数据,其实字段比这个还要多很多,大概差不多三十个左右)
工作模式应该是:
读取100个文件时,怎么处理哦?
我之前思路是:
读取:把文件名计算出来放到一个List里,然后迭代List。然后处理相关文件,
匹配:用split方式把它变成字符串数组,用数组元素进行比较
用单线程的方式。即一条线执行下去。一个文件一个文件地打开,读取,匹配,把匹配数据放到内存中关闭,再打开下一个。。。。。
谁有比较好的方案吗?比如匹配,是不是用正则表达式的方式代替split方式会好点。或者还有其它更好的吗?
对于100个文件来说,是不是用多线程的方式会好点?但如果10个线程同时开启。会加载300M文件放到内存中,会不会不合适?
请大哥们帮忙优化一下吧。。。谢谢。。
[b]问题补充:[/b]
匹配没有问题,只是好像使用split方法性能不佳.
其实还涉及到分页的问题.第一次是搜索全部的数据,然后把匹配的数据记录标识(如文件名,位置)等放到一个list里.然后下次再访问的时候,取别的页的时候,可以直接通过记录信息定位到具体的数据.然后取就行了.目前是用RandomAccessFile这个类实现.(用buffer方式对这个类进行了包装).性能还是不是很好.主要是定位到某文件某pointer里.谁有比较好的文件读取器工具吗?
:P :P :P :P
关于多线程搜索.刚才我试了一下,我控制不了.
我想通过一个线程池的方式.然后每次让10个线程进行.
只是不太会控制,如何分配这些线程.
比如我有100个文件,按理说,是一开始让十个线程进行搜索.其它的等待.然后某线程完成了后.再把这个线程分给搜索新文件.
我不知道,完成后,如何告知分配?(目前想着用回调)
但进行的时候,未分配的待搜索文件.如何让他们等待?是用sleep吗?还是?
PS:感谢bohemia 与taopian 的回答.能再给详细点方案吗?谢谢.