[分享] java nio performance tuning
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
推
10/03 14:25, , 1F
10/03 14:25, 1F
→
10/03 14:29, , 2F
10/03 14:29, 2F
→
10/03 16:25, , 3F
10/03 16:25, 3F
→
10/03 16:27, , 4F
10/03 16:27, 4F
→
10/03 16:32, , 5F
10/03 16:32, 5F
推
10/03 16:42, , 6F
10/03 16:42, 6F
推
10/04 01:50, , 7F
10/04 01:50, 7F
推
10/06 16:08, , 8F
10/06 16:08, 8F
推
10/06 17:05, , 9F
10/06 17:05, 9F
→
10/08 19:54, , 10F
10/08 19:54, 10F
→
10/08 19:55, , 11F
10/08 19:55, 11F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 6 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章