在执行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的时候需要倒过来转换: