1. 程式人生 > >java nio基礎教程

java nio基礎教程

最近看到招聘上面要求對java nio知識的需求比較多 所有沒事研究了下   

java nio故名思議 就是 java new io 也就是在原有的io基礎上做進一步擴充 效能提升等等

java nio中新增了2個常用的名詞 channel 跟buffer   

老辦法先上一個例子來說明下具體操作

從上面的例子中我們基本上可以瞭解channel跟buffer的用處     channel 就是一個物件 可以通過他來讀取和寫入資料 就跟io裡面的流一樣。在java nio中所有的操作都是通過

buffer來進行的 也就是說您永遠也不會將位元組寫入通道中 相反 您是將資料寫入包含一個或者多個位元組的緩衝區 讀取也一樣。又因為通道是雙向的所有速度要不留要快

從上面的例子可以看出 讀跟寫檔案基本上需要3個步驟來進行   首選 從fileInputStream獲取channel    其實 建立buffer 最好從channel讀取或者寫入buffer中。

這就是基本上的操作

例子中的buffer.clear()跟buffer.flip()的用法

clear() 方法重設緩衝區,使它可以接受讀入的資料。 flip() 方法讓緩衝區可以將新讀入的資料寫入另一個通道。

可以用三個值指定緩衝區在任意時刻的狀態:

• position

• limit

• capacity

這三個變數一起可以跟蹤緩衝區的狀態和它所包含的資料。我們將在下面的小節中詳細分析每一個變數,還要介紹它們如何適應典型的讀/寫(輸入/輸出)程序。在這個例子中,我們假定要將資料從一個輸入通道拷貝到一個輸出通道。

Position

您可以回想一下,緩衝區實際上就是美化了的陣列。在從通道讀取時,您將所讀取的資料放到底層的陣列中。 position 變數跟蹤已經寫了多少資料。更準確地說,它指定了下一個位元組將放到陣列的哪一個元素中。因此,如果您從通道中讀三個位元組到緩衝區中,那麼緩衝區的 position 將會設定為3,指向陣列中第四個元素。

同樣,在寫入通道時,您是從緩衝區中獲取資料。 position 值跟蹤從緩衝區中獲取了多少資料。更準確地說,它指定下一個位元組來自陣列的哪一個元素。因此如果從緩衝區寫了5個位元組到通道中,那麼緩衝區的 position 將被設定為5,指向陣列的第六個元素。

Limit

limit 變量表明還有多少資料需要取出(在從緩衝區寫入通道時),或者還有多少空間可以放入資料(在從通道讀入緩衝區時)。

position 總是小於或者等於 limit。

Capacity

緩衝區的 capacity 表明可以儲存在緩衝區中的最大資料容量。實際上,它指定了底層陣列的大小 ― 或者至少是指定了准許我們使用的底層陣列的容量。

limit 決不能大於 capacity。