搜索重复代码_通过MappedByteBuffer搜索大文件
此應(yīng)用程序?qū)τ谠诓贿m合BufferedReader、files.readAllLines()、files.lines()和Scanner的大文件中進行搜索非常有用。
我們將在這里討論的解決方案基于Java NIO.2、MappedByteBuffer和FileChannel。此解決方案從給定文件上的文件通道打開內(nèi)存映射字節(jié)緩沖區(qū)(mapped byte buffer)。我們遍歷獲取的字節(jié)緩沖區(qū)并查找與搜索字符串的匹配項(此字符串轉(zhuǎn)換為字節(jié)byte[],然后逐字節(jié)進行搜索)。
對于相對較小的文件,將整個文件加載到內(nèi)存中會更快(如果RAM允許的話)。對于大型/大型文件,以塊(例如,5 MB的塊)的形式加載和處理文件會更快。加載塊后,必須計算搜索字符串的出現(xiàn)次數(shù)。我們存儲結(jié)果并將其傳遞給下一個數(shù)據(jù)塊。我們重復(fù)這個直到整個文件被遍歷。
讓我們來看看這個實現(xiàn)的核心代碼(查看與本書捆綁在一起的源代碼以獲得完整的代碼):
這個解決方案非常快速,因為文件直接從操作系統(tǒng)的內(nèi)存中讀取,而不必加載到JVM中。操作在本機級別(稱為操作系統(tǒng)級別)進行。注意,此實現(xiàn)僅適用于UTF-8字符集,但也可以適用于其他字符集。
完整的應(yīng)用程序在GitHub上可用。
如果您喜歡這篇文章,那么我相信您一定會喜歡Java編碼問題的第6章。本章專門討論Java中的文件/文件夾操作。
這么多大牛的代碼,如果您希望換一個工作,如果您希望換一個工作環(huán)境,來來來:
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的搜索重复代码_通过MappedByteBuffer搜索大文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis stream持久化_Beet
- 下一篇: js中执行到一个if就停止的代码_Nod