java nio分段读文件

今天看到有同事blog中有个淘宝的笔试题也写了一个读大文件的东西,欢迎拍砖
题目是
统计一个单词可重复的英文文件(假设4G)中每个单词出现的次数,把结果按照英文排序放入一个文件中。并能够检索特定单词的出现次数。由于文件过大,不重复单词总数有限,需要考虑到执行速度和内存使用情况。(淘宝笔试技术题)


public String readFile(String fName, long start, int len)
throws Exception {
RandomAccessFile raf = new RandomAccessFile(fName, "rw");
byte src[] = new byte[len];
// 文件读完返回为null
if (raf.length() < start + len)
return null;
FileChannel channel = raf.getChannel();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY,
start, len);
for (int i = 0; i < len; i++) {
if (buffer.get(i) != 0) {
src[i] = buffer.get(i);
}
}
buffer.clear();
channel.close();
raf.close();
return new String(src,0,len);
}

[b]IO读文件代码[/b]


public String[] readFile(String path, int form, int to)
throws Exception {
String strs[] = new String[to - form];
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
String temp = null;
int i = 0;
while ((temp = br.readLine()) != null) {
i++;
if (i > form && i < to) {
strs[i] = temp;
}
}
br.close();
fr.close();
return strs;
}

[b]ps:代码中有很多bug 以前没有很多接触nio 欢迎指教![/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值