- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 923字
- 2020-10-30 18:10:46
2.6.2 緩沖區數據結構
在使用內存映射時,我們創建了單一的緩沖區橫跨整個文件或我們感興趣的文件區域。我們還可以使用更多的緩沖區來讀寫大小適度的信息塊。
本節將簡要地介紹Buffer對象上的基本操作。緩沖區是由具有相同類型的數值構成的數組,Buffer類是一個抽象類,它有眾多的具體子類,包括ByteBuffer、CharBuffer、DoubleBuffer、IntBuffer、LongBuffer和ShortBuffer。
注意:StringBuffer類與這些緩沖區沒有關系。
在實踐中,最常用的將是ByteBuffer和CharBuffer。如圖2-10所示,每個緩沖區都具有:
·一個容量,它永遠不能改變。
·一個讀寫位置,下一個值將在此進行讀寫。
·一個界限,超過它進行讀寫是沒有意義的。
·一個可選的標記,用于重復一個讀入或寫出操作。

圖2-10 一個緩沖區
這些值滿足下面的條件:
0≤標記≤位置≤界限≤容量
使用緩沖區的主要目的是執行“寫,然后讀入”循環。假設我們有一個緩沖區,在一開始,它的位置為0,界限等于容量。我們不斷地調用put將值添加到這個緩沖區中,當我們耗盡所有的數據或者寫出的數據量達到容量大小時,就該切換到讀入操作了。
這時調用flip方法將界限設置到當前位置,并把位置復位到0?,F在在remaining方法返回正數時(它返回的值是“界限-位置”),不斷地調用get。在我們將緩沖區中所有的值都讀入之后,調用clear使緩沖區為下一次寫循環做好準備。clear方法將位置復位到0,并將界限復位到容量。
如果你想重讀緩沖區,可以使用rewind或mark/reset方法,詳細內容請查看API注釋。
要獲取緩沖區,可以調用諸如ByteBuffer.allocate或ByteBuffer.wrap這樣的靜態方法。
然后,可以用來自某個通道的數據填充緩沖區,或者將緩沖區的內容寫出通道中。例如:

這是一種非常有用的方法,可以替代隨機訪問文件。
java.nio.Buffer 1.4
·Buffer clear()
通過將位置復位到0,并將界限設置到容量,使這個緩沖區為寫出做好準備。返回this。
·Buffer flip()
通過將界限設置到位置,并將位置復位到0,使這個緩沖區為讀入做好準備。返回this。
·Buffer rewind()
通過將讀寫位置復位到0,并保持界限不變,使這個緩沖區為重新讀入相同的值做好準備。返回this。
·Buffer mark()
將這個緩沖區的標記設置到讀寫位置,返回this。
·Buffer reset()
將這個緩沖區的位置設置到標記,從而允許被標記的部分可以再次被讀入或寫出,返回this。
·int remaining()
返回剩余可讀入或可寫出的值的數量,即界限與位置之間的差異。
·int position()
·void position(int newValue)
返回這個緩沖區的位置。
·int capacity()
返回這個緩沖區的容量。
- Mastering NetBeans
- Learn TypeScript 3 by Building Web Applications
- 高效微控制器C語言編程
- Instant Apache Stanbol
- C語言程序設計教程(第2版)
- 人臉識別原理及算法:動態人臉識別系統研究
- Linux操作系統基礎案例教程
- 零基礎輕松學SQL Server 2016
- RSpec Essentials
- Python High Performance Programming
- Learning Hadoop 2
- 運維前線:一線運維專家的運維方法、技巧與實踐
- ExtJS Web應用程序開發指南第2版
- Applied Deep Learning with Python
- Solr權威指南(下卷)