程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 緩存,java緩存技術

緩存,java緩存技術

編輯:JAVA綜合教程

緩存,java緩存技術


緩存的意思是中間存儲,相當於中轉站,積累一定的貨物,再往目的地運送。如果沒有中轉站,就會出現一件一件的運送,耗費大量的人力物力。

緩存的基類是:Buffer

緩存的基本子類有:Char/Byte/Short/Int/Long/Float/Double + Buffer

 

緩存一般用一個數組做存儲,array()方法可以獲取這個數組,但並不是所有Buffer都能夠獲取這個數組,使用hasArray()方法的返回值,查看Buffer是否能獲取數組。有兩種情況,Buffer是不能獲取數組。

第一種情況,直接存儲的Buffer:使用new創建一個數組,這個數組使用的存儲空間是堆空間,如果使用JIN,然後直接從內存中開辟空間,這樣就可以節省堆空間,解決一些堆空間不足的情況。因此,Buffer分堆存儲,和直接存儲。堆存儲的Buffer使用allocate(int)靜態方法創建,直接存儲的Buffer使用allocateDirect(int)靜態方法創建,wrap(...)靜態方法是自己提供一個數組來創建Buffer,自己提供的數組肯定是屬於堆空間上的。使用isDirect()方法,可以查看Buffer是否為直接儲存,否則為堆存儲。

第二種情況,只讀模式的Buffer:緩存的基本操作就是讀和寫,使用get()方法進行讀取操作,使用put()方法進行寫入操作。Buffer創建的時候,既可以讀,也可以寫。有一種需求,Buffer需要提供給其它操作者,但只能讀,不能寫。使用asReadOnlyBuffer()方法就能創建出一個只讀Buffer,這個只讀Buffer與原Buffer是共享同一個數組,共享數組可以達到節省空間的目的。因此,為了不讓操作者進行寫操作,只讀模式的Buffer就不允許操作者獲得裡面的數組。使用isReadOnly()方法,查看Buffer是否只讀。

 

緩存在讀取和寫入數組單元時,其操作位與實際操作位會有偏差,使用arrayOffset()方法,可以獲得這個偏差量。以下方法的參數和返回值,都是相對於偏差量的。

  • 當前操作位:position()/position(int)
  • 操作結束位:limit()/limit(int)
  • 操作結束位的最大值:capacity()

每次操作完後,當前操作位就會指向下一個數組單元。一直到操作結束位時,緩存就不允許再操作。通過limit()-position(),也可以使用remaining()方法,查看剩余操作量。使用hasRemaining()方法,查看是否還能操作。

當前操作位與操作結束位可以通過position(int)和limit(int)方法單獨調整,也可以通過其它方法進行整體調整。

  • clear()方法,調整position為0,limit為capacity,表示清除所有數據,等待寫入數據。
  • flip()方法,調整limi為position,position為0,表示寫數據完畢,等待讀取數據。
  • rewind()方法,調整position為0,表示重新寫入或重新讀取數據。
  • reset()方法,調整position為回檔位,表示操作從回檔位開始。回檔位是需要事先使用mark()方法標記當前操作位為回檔位,回檔位不能大於當接操作位,否則在調整過程中,回檔位被消除。
  • compact()方法,把未讀數據復制至開始位置,調整position為剩余量,調整limit為capacity,表示清除已讀數據,保留未讀數據,並等待寫入數據。

(注:圖源於http://www.cnblogs.com/hvicen/p/6138690.html)

該圖表示出Buffer在寫與讀的時候,limit所處的位置,左邊是寫模式,右邊是讀模式。使用flip()方法,使寫模式轉變為讀模式。使用clear()和compact()方法,使讀模式轉變為寫模式,clear()是清空所有數據,compact()只清除已讀數據,保留未讀數據。

 

使用duplicate()方法,拷貝出一個屬性和狀態一致的Buffer,兩個Buffer是共享數組。

使用slice()方法,構建出一個Buffer,這個Buffer以當前操作位的實際操作位為偏差量,以剩余操作量為操作結束位的最大值。換句話說,slice的意思是切片,切出一個從當前操作位到操作結束位的Buffer,這個Buffer的讀與寫只能在這一段上面進行,同樣切出來的Buffer與原Buffer是共享數組。

一個數據單元可以切分成多個字節,例如一個整型數據可以切分成四個字節,存儲在數組時,可以從高位到低位存儲,也可以從低位到高位存儲。使用order()/order(ByteOrder)方法,可以查看和設置一個數據單元的排列方式,低位到高位排列為ByteOrder.BIG_ENDIAN,高位到低位排列為ByteOrder.LITTLE_ENDIAN。使用ByteOrder.nativeOrder()方法,查看本地的數據排列方式。

 

本文原創,待續更新!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved