天天看點

Java讀取檔案加速

在執行io時,java的inputstream被廣泛使用,比如datainputstream.readint等等。事實上,這些高度封裝的接口奇慢無比。我有一個項目啟動時需要讀取90mb左右的詞典檔案,用datainputstream耗時3秒以上,換用java.nio包直接操作記憶體位元組,可以加速到300ms左右,整整提速10倍!當然,前提是你熟悉位運算。

java.nio中提供了兩個類 filechannel 和 bytebuffer來将檔案映射到記憶體,其中filechannel表示檔案通道,bytebuffer是一個緩沖區。

①從fileinputstream、fileoutputstream以及randomaccessfile對象擷取檔案通道

②将檔案記憶體映射到bytebuffer

③通過bytebuffer.array()接口得到一個byte數組

④直接操作位元組

示例代碼

其中,如果你當初使用了dataoutputstream.writeint來儲存檔案的話,那麼在讀取的時候就要注意了。writeint寫入四個位元組,其中高位在前,低位在後,是以将byte數組轉為int的時候需要倒過來轉換: