要求完成文件读取,过滤,列印操作。
有一大小为1GB的源文件mail.log中记录以下格式的数据,将其中信箱为@sina.com的地址筛选出来。
要求程序占用的内存不能超过512MB,代码尽可能高效,在最短时间完成运算。
实际代码或伪代码或者写明思路都可以
July@sina.com.cn
Cross@hotmial.com
dana@gmail.com
mike@sina.com
jones@163.com
直接用命令行不?:)
grep "sina.com$" mail.log
看清楚 1G容量大小。
######BufferedReader bf=xxxx;
while ((line = bf.readLine()) != null){
//直接处理一行的内容line,也可以一次读取100行或1000行再处理
}
这样行不?
######问题是打开的时候本身就会很慢...
######先做文件切割,切小点,文件多点
然后分段读如内存
摘出符合条件的存入新文件
新文件中排序,剔除重复的
-------------------------
是这个思路么?
######先做文件切割,切小点,文件多点
然后分段读如内存
摘出符合条件的存入新文件
新文件中排序,剔除重复的
-------------------------
是这个思路么?
文件切割过程不占用内存?
######至少要分两次读取,最好分3~4次为好。。。
######
问题是打开的时候本身就会很慢...
打开不会很慢,fopen操作,打开1K的文件和打开16G的文件,速度几乎没有差别。
######MappedByteBuffer 分段读取 ,一次100M。
######MappedByteBuffer 分段读取 ,一次100M。
正解
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。