Java NIO 簡單了解

2021-06-29 11:42:03 字數 1346 閱讀 4528

一直沒有了解過nio,更沒有用過nio,由於很多分布式框架或多或少都涉及到了nio,因此,先做個簡單了解。

推薦:nio 入門,入門教程中沒有比這篇更合適的了。

乙個簡單的檔案複製例子。

首先建立兩個輸入輸出流:

fileinputstream fin = new fileinputstream("d:/test.txt");

fileoutputstream fout = new fileoutputstream("d:/copy.txt");

然後從輸入輸出流獲取檔案通道:

filechannel fcin = fin.getchannel();

filechannel fcout = fout.getchannel();

下面通過byte陣列包裝的bytebuffer這裡是由陣列包裝的目的是為了下面的輸出檔案的內容。

byte bytes = new

byte[1024];

bytebuffer buffer = bytebuffer.wrap(bytes);

如果僅僅是讀取流,可以直接使用bytebuffer buffer = bytebuffer.allocate(1024)這種方式建立bytebuffer

然後通過乙個迴圈來讀取資料:

do
system.out.print(new string(bytes, 0, r, "utf-8"));
在寫入之前,需要先呼叫bufferflip()方法,該方法也是通過修改標誌位,可以根據實際的長度寫入輸出流中:

buffer.flip();
寫入輸出流:

fcout.write(buffer);

} while (true);

最後別忘了關閉流,這裡需要注意一點,channel物件也有乙個close()方法,該方法實際上是呼叫inputstreamoutputstreamclose()方法,所以這裡最好的關閉方式,就是在stream上呼叫close()

fin.close();

fout.close();

Java NIO簡單例子

例子如下 selector selector try if sk.iswritable catch ioexception e 對於客戶端而言,socket鏈結通常只有乙個,一般selector的select方法迴圈用在讀執行緒裡面,當select方法返回時,就去read,然後處理。而寫操作單獨用在...

Java NIO學習總結

1 nio的概念 從jdk1.4開始就出現非阻塞式 non blocking io,是基於通道 channel 和緩衝區 buffer 進行操作 內部設定兩個緩衝區 傳送區 接收區 和高速通道 兩個緩衝區 傳送區 接收區 高速通道 封裝了socket 2 nio的模式 資料從高速通道中出來,都會進入...

sql簡單了解

sql是一種資料庫語言,資料庫是用來儲存 管理 組織資料的倉庫。sql中有許多的關鍵字,現在只了解下很重要的,經常出現的關鍵字。查詢select,要和from連用。where是指明位置的關鍵字,其內容很豐富。delete刪除,刪除無儲存。delete from xx where xx。update更...