一直沒有了解過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"));
在寫入之前,需要先呼叫buffer
的flip()
方法,該方法也是通過修改標誌位,可以根據實際的長度寫入輸出流中:
buffer.flip();
寫入輸出流:
fcout.write(buffer);
} while (true);
最後別忘了關閉流,這裡需要注意一點,channel
物件也有乙個close()
方法,該方法實際上是呼叫inputstream
和outputstream
的close()
方法,所以這裡最好的關閉方式,就是在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更...