2017-06-20 171 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的內存中讀取。如果有,它可能不在不同的操作系統上。因人而異。