1. 程式人生 > >Java nio Buffer.get() Buffer.put()

Java nio Buffer.get() Buffer.put()

最近在看程式設計思想的時候一直對nio中的一些類的方法的運作方式感到十分疑惑,比如Channel.read(buffer),Channel.write(buffer),Buffer.get(),Buffer.put().

在翻閱原始碼後發現Java的Buffer,CharBuffer原始碼中都看不到get(),put()方法的具體實現,這些方法都是抽象方法。當然其也有過載版本的具體實現,但是我想了解的那一部分卻是抽象的。

於是根據程式設計思想P561的程式,對get()和put()的性質做個小總結: 一旦呼叫緩衝器上的get()和put()方法,position指標就會隨之相應變化

對於get()行為,根據程式碼結果可以得到(以CharBuffer為例): get()方法返回當前postion所指的陣列值,並將position值+1

對於put(char c)行為: 將當前position的值置為c,並將position值+1

關於clear()方法,書上對clear()的作用是這樣解釋的: 清空緩衝區,將position置0,limit置為capacity 在原始碼中我找到了對clear()的描述:

This method does not actually erase the data in the buffer, but it is named as if
it did because it will most often be used in situations in which that might as well 
be the case. 

所以呼叫clear()方法,緩衝區還是會有資料的,只不過之後讀入緩衝區的資料會將舊值覆蓋。