有点不明白为啥每个Task都要去全量加载一次数据
来源:2-12 深入Buffer-Coding-阿里面试题:中文乱码处理和大文件词频统计(2)

Panda_io
2021-06-06
@Override
public HashMap<String, Integer> call() throws Exception {
HashMap<String, Integer> map = new HashMap<>();
// 老师您这里每个Task都会去磁盘全量加载一次数据,能不能读一次,传递channel到task呢?
FileChannel channel = new RandomAccessFile(this.fileName, "rw").getChannel();
MappedByteBuffer mbuf = channel.map(FileChannel.MapMode.READ_ONLY,
this.start,
this.end - this.start);
String str = StandardCharsets.US_ASCII.decode(mbuf).toString();
return countByString(str);
}
写回答
1回答
-
求老仙
2021-06-07
同学,这个不是全量的访问。
这是一个RandomAccessFile,也就是说,可以从文件任何位置随机读取。
这里用了channel.map,设置了开始结束区间,相当于每次只读一个缓冲区的数据。
012021-06-07
相似问题