BufferedReader和文件系统缓存

时间:2017-06-20 14:02:58

标签: java nio java-io

FileChannel documentation声称您可以手动将文件放入FS缓存中。但FileChannel缺乏任何逐行读取文件的方法。另一方面,BufferedReader为您提供了优秀的API来逐行读取文件,但BufferedReader documentation没有关于将文件放入FS缓存的任何注意事项。

BufferedReader是否足够聪明,可以在第一次阅读后将文件放入FS缓存中?

1 个答案:

答案 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。