FileChannel documentation声称您可以手动将文件放入FS缓存中。但FileChannel
缺乏任何逐行读取文件的方法。另一方面,BufferedReader
为您提供了优秀的API来逐行读取文件,但BufferedReader documentation没有关于将文件放入FS缓存的任何注意事项。
BufferedReader
是否足够聪明,可以在第一次阅读后将文件放入FS缓存中?
答案 0 :(得分:2)
您无法从BufferedReader
创建FileChannel
,但您可以尝试以下内容,看看它是否能让您接近所需内容:
File file = ...;
long pos = 0;
long size = file.length();
FileInputStream fis = new FileInputStream(file);
FileChannel fc = fis.getChannel();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_ONLY, pos, size);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
但是,无法保证FileInputStream
将从映射到MappedByteBuffer
的内存中读取。如果是,则可能不在其他操作系统上。 YMMV。