有点不明白为啥每个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,设置了开始结束区间,相当于每次只读一个缓冲区的数据。

0
1
Panda_io
明白了谢谢老师!!!
2021-06-07
共1条回复

笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

深度剖析大厂面试高频真题,让你秒变offer收割机

1783 学习 · 314 问题

查看课程