看板 java 關於我們 聯絡資訊
http://www.idryman.org/blog/2013/09/28/java-fast-io-using-java-nio-api/ 最近換工作,開始寫hadoop & java 學了一些新東西就開始寫java相關的部落格文章了 這一篇是我用java nio把一個資料讀取的時間從194秒壓到0.16秒 底層API的威力果然不同凡響啊... 簡而言之,java nio是 New IO 的縮寫 裡面支援bulk copy還有asynchronous read/write 如果有用C寫過fread, fseek, rewind等功能的話 對nio的介面應該會感到相當熟悉 我只有用到基本的bulk copy 進階的mmap或是async io因為效能目標已經達到就沒研究了 範例code長這樣:(syntax highlight請進blog看) public static void readIPFromNIO() throws IOException{ FileInputStream fis = new FileInputStream(new File("ip.bin")); FileChannel channel = fis.getChannel(); ByteBuffer bb = ByteBuffer.allocateDirect(64*1024); bb.clear(); ipArr = new int [(int)channel.size()/4]; System.out.println("File size: "+channel.size()/4); long len = 0; int offset = 0; while ((len = channel.read(bb))!= -1){ bb.flip(); //System.out.println("Offset: "+offset+"\tlen: "+len+"\tremaining:"+bb.hasRemaining()); bb.asIntBuffer().get(ipArr,offset,(int)len/4); offset += (int)len/4; bb.clear(); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 108.205.154.230
gmoz:推NIO o_o 10/03 14:25
gmoz:比較舊的CPU是不是沒有DMA? 10/03 14:29
iterator:要不要再想想看, 你前兩個比較組是不是真的那麼慢? 10/03 16:25
iterator:消耗的時間,真的都在於 java.io 與 java.nio 的差距上嗎? 10/03 16:27
sbrhsieh:這樣的數據真的有點聳動,我認為幾十倍的差距還是有的 10/03 16:32
cowbaying:1212倍... 10/03 16:42
AI3767:NIO看來不錯用 ^^ 10/04 01:50
jerry74:NIO是non-blocking IO 不是New IO... 10/06 16:08
popcorny:NIO確實是New IO唷 10/06 17:05
Killercat:大多數人用nio package都是為了non blocking才有此誤解 10/08 19:54
Killercat:我自己也是誤解了很長一段時間 XD nio包內很多東西 10/08 19:55