NIO與IO讀檔案

2021-06-21 23:18:56 字數 1919 閱讀 6603

對於讀檔案nio與io誰快?

如果加一些複雜環境,然後再讓他們去讀檔案呢?

為了得到這個答案,我做了兩組實驗,首先是直接單執行緒去讀乙個很大的檔案,分別通過nio和io去讀:

/**

* nio 讀

* * @param filename

*/public static void readfilewithnio(string filename)

fc.close();

fs.close();

system.out.println("nio read time:" + (new date().gettime() - now)

+ "ms");

} catch (exception e)

}

public static void readfilewithio(string filename) 

fs.close();

system.out.println("io read time:" + (new date().gettime() - now)

+ "ms");

} catch (exception e)

}

結果相信測試過的人都知道,io的速率一般來講都是nio的3倍多,說明單執行緒讀檔案,io比nio快。

對於這個結論並不奇怪,因為nio的特性明確標明是 非阻塞。單執行緒讀檔案,很難體現這個非阻塞的特點,非阻塞的言外之意是可以幹別的事情。於是,我做了如下實驗,我用多執行緒去讀檔案,也是分別用io和nio,這個時候的測試結果發現nio和io已經非常接近了,但是還是io快。於是,我有增加了額外的執行緒在讀檔案的同時去幹一些其他的事情,這個時候,我終於發現nio比io快了,**如下:

public static void readfilewithniomultthread(string filename) 

} catch (exception e) }}

arraylistlist = new arraylist();

for (int i = 0; i < 10; i++)

for (int i = 0; i < 10; i++)

} catch (exception e)

}});

list.add(tmp);

tmp.start();

}for (thread t : list)

fc.close();

fs.close();

system.out.println("nio read time:" + (new date().gettime() - now)

+ "ms");

} catch (exception e)

}

public static void readfilewithiomultthreads(string filename) 

} catch (exception e) }}

arraylistlist = new arraylist();

for (int i = 0; i < 10; i++)

for (int i = 0; i < 10; i++)

} catch (exception e)

}});

list.add(tmp);

tmp.start();

}for (thread t : list)

fs.close();

system.out.println("io read time:" + (new date().gettime() - now)

+ "ms");

} catch (exception e)

}

IO與NIO的區別

一 實現方式 傳統io 1.傳統的socket io當客戶端和服務端連線成功後,服務端在進行讀取客戶端傳送的資訊的時候是通過新建執行緒來處理的,由此帶來了乙個問題,當有大量客戶端想服務端傳輸資料的時候,服務端就會啟動大量執行緒,這樣將大大的增加了伺服器的壓力。2.同時,傳統io通訊是阻塞的,即在讀取...

nio與io的比較

nio是new io的簡稱,從jdk1.4就被引入了。現在的jdk已經到了1.6了,可以說不是什麼新東西了。但其中的一些思想值得我來研究。這兩天,我研究了下其中的套接字部分,有一些心得,在此分享。首先先分析下 為什麼要nio套接字?nio的主要作用就是用來解決速度差異的。舉個例子 計算機處理的速度,...

簡單理解io與nio

io是面向流的,而nio是面向緩衝區的 io每次從流中讀取乙個或者多個位元組,直到讀取完所有的位元組,這就意外著它是阻塞式的,當乙個執行緒執行read或者write的時候,這個執行緒是不能夠再去做其他的事情了 nio會讀取資料放到乙個緩衝區裡,這樣可以增加讀取資料的靈活性,可以前後移動讀取資料的位置...