1. 程式人生 > >Nio中的channel與Oio中的stream的區別

Nio中的channel與Oio中的stream的區別

channel是雙向的,既可以讀,也可以寫。而stream是單向的,一個stream不可能同時讀同時寫,這樣也從java規範中不允許的,因為inputstream和outputstream都是抽象類,一個類不可能同時繼承兩個抽象類。

應用程式通過channel讀取外部資料(比如檔案),首先得獲取這個資料對應的channel,然後通過channel將資料寫入的buffer當中,不管這個buffer是堆內緩衝區還是直接緩衝區。應用程式操作的是這個buffer中的資料。

而應用程式通過stream讀取外部資料(比如檔案),首先獲取這個檔案對應的stream,然後直接從stream中獲取對應的資料。

channel可以在非同步非阻塞變成中使用,在讀取資料的過程中會產生相應的時事件,而stream只能在阻塞程式設計中使用。

在檔案操作中,channel可以通過FileStream的getChannel方法獲得,實現了nio與oio的相互轉換。