文件处理题目
有一个100个数的的数组A,每个数字都是10位且这些数字没有重复的。
另有上百万个文件,每个文件有几百条记录,每条记录有50位。
拿文件中的11位到20位和数组A中的数字比较,只要有一个匹配的,就将整条记录输出到另外一个文件。
用什么算法最好?
[解决办法]
1.把数组A排序,并把数字转成字符串便于后面比较(因文件中是字符串,亿级的数据如果转成数字来比较,还是挺耗时的);
2.按块读文件(页大小的整数倍最佳)或用内存映射文件(哪个方法最快没测过)以提高文件读取速度,千万别按行读。如果内存大的话,可以把整个文件读到内存里。我测过按字节读和按块读,速度不是一个数量级的;
3.与数组A比较时用二分法(100数据好像效果甚微,全部处理下来应该会有效果);
4.写文件的时候,找个合适缓存方法;
从这个问题看,读文件是最耗时的,瓶颈应该在这儿。