關於NIO以及簡單DEMO

2021-09-24 13:01:46 字數 2047 閱讀 6858

今天腦袋裡突然冒出來nio 所以記錄一下

io是以流的方式處理資料 nio是以塊的方式處理資料

關鍵:  buffer channel selector 簡介

buffer:包含了寫入或讀出的資料 在nio中 資料是放在buffer物件中的,程式不能直接對資料進行操作必須用buffer來進行操作。也就是說 channel 通過buffer來讀寫資料。

channel :可以通過channel 讀取和寫入資料,類似流,但是與流不同的是 channel 是雙向的既能讀又能寫 還可以進行非同步的讀寫  對channel的讀寫必須通過buffer物件。

selector:可以註冊到多個channel 上,監聽各個channel 發生的事件,根據事件定義情況決定channel 讀寫

寫了個步驟簡單例子:

/**

* 伺服器端

* */

public class niosrver

// 如果是可讀事件

if (key.isreadable())

}} }

/*** 接入事件處理器

* */

private void accepthandler(serversocketchannel serversocketchannel,

selector selector) throws ioexception

/*** 可讀事件處理器

* */

private void readhandler(selectionkey selectionkey, selector selector)

throws ioexception

// 再次將channel註冊到selector上

socketchannel.register(selector, selectionkey.op_read);

// 將客戶端傳送的請求資訊 廣播給其他客戶端

if (request.length() > 0)

} /**

* 廣播給其他客戶端

*/private void brodcast(selector selector,socketchannel socketchannel

,string request)throws ioexception

} }public static void main(string args) catch (ioexception e)

}}

/**

* nio客戶端

* */

public class nioclient

} }}

/**

* 客戶端執行緒類 專門負責接收伺服器端響應資訊

* */

public class nioclienthandler implements runnable

@override

public void run() }}

} catch (ioexception e)

} /**

* 可讀事件處理器

* */

private void readhandler(selectionkey selectionkey, selector selector)

throws ioexception

// 再次將channel註冊到selector上

socketchannel.register(selector, selectionkey.op_read);

// 將服務端響應資訊列印到本地

if (response.length() > 0)

}}

public class clienta 

}

public class clientb 

}

public class clientc 

}

就這樣吧 記錄一下 主要是記錄使用步驟 按照1-7的步驟去做便於記憶。就醬。

NIO簡單應用

public class fileniocopydemo 複製兩個資源目錄下的檔案 private static void niocopyresourcefile private static void niocopyfile string sourcepath,string destpath lo...

NIO 簡單筆記

public static void main string args throws ioexceptionbytebuffer 介面有4個類實現,字尾r表示唯讀。不可執行put方法,一旦執行,直接丟擲異常,原始碼其實就是就是new乙個異常。directbytebuffer,directbytebu...

NIO 簡單筆記

public static void main string args throws ioexceptionbytebuffer 介面有4個類實現,字尾r表示唯讀。不可執行put方法,一旦執行,直接丟擲異常,原始碼其實就是就是new乙個異常。directbytebuffer,directbytebu...