今天腦袋裡突然冒出來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...