2017-06-20 86 views
-1

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

BufferedReader聪明到第一次读取后将文件放入FS缓存?

+0

如果文档中没有提示,它将不会使用缓存 – Jens

+3

我无法看到文档中的位置,它说您可以手动将它放入FS缓存中?我认为没有可用于将文件放入FS缓存的API,因此如果文件始终被读取且只读,则操作系统会将文件放入FS缓存中,该文件通常由FS高速缓存,FS高速缓存是操作系统可用的内存,而不是jvm,所以如果你想从FS高速缓存中受益,那么留下一些操作系统的RAM,而不是给JVM提供所有可用的RAM,所以操作系统可以使用fs高速缓存和使阅读操作快速发展。 – Elbek

+0

@Elbek右键,通过“手动将文件放入FS缓存”我的意思是有一个API,意思是由你决定是否把东西放到FS缓存中 –

回答

2

你不能从FileChannel创建BufferedReader,但你可以用下面的,看它是否让你接近你在找什么实验:

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的内存中读取。如果有,它可能不在不同的操作系统上。因人而异。