Buffer常用操作及原理分析

2021-07-16 23:10:27 字數 1267 閱讀 2817

乙個buffer是乙個固定數量的資料容器。其作用是乙個儲存器,或者分段運輸區,在這裡資料可被儲存並在之後用於檢索,對於每個非boolean原始資料型別都有乙個緩衝區。儘管緩衝區作用於他們儲存的原始資料型別,但緩衝區十分傾向於處理位元組。非位元組緩衝區可以在後台執行從位元組或到位元組的轉換,緩衝區的工作與通道緊密聯絡。通道是i/o傳輸發生時通過的入口,而緩衝區是這些資料傳輸的**或目標。對於離開緩衝區的傳輸,您想離開緩衝區的傳輸,您想傳遞出去的資料被置於乙個緩衝區,被傳送到通道。對於傳回緩衝區的傳輸,乙個通道將資料放置在您所提供的緩衝區中。這種在協同物件之間進行的緩衝區資料傳遞是高效資料處理的關鍵。

緩衝區基礎:

1.屬性

所有的緩衝區都具有四個屬性來提供關於其所包含的資料元素的資訊。他們是:

容量(capacity)

緩衝區能夠容納的資料元素的最大數量。這一容量在緩衝區建立時被設定,並且永遠不能被改變。

上界(limit)

緩衝區的第乙個不能被讀或者寫的元素。或者說,緩衝區中現存元素的計數。

位置(position)

下乙個要被讀或寫的元素的索引。位置會自動由響應的get()和put()函式更新。

標記(mark)

乙個備忘位置。呼叫mark()來設定mark = position,呼叫reset()設定position= mark。標記在設定前是未定義的。

這四個屬性關係如下:

0<=mark<=position<=limit<=capacity

2.實際使用中的例子:

當新建立乙個容量為10的緩衝區的時候,其邏輯檢視如下:

位置(position)被設定為0,上界和容量(capacity)都為10,其中capacity是固定不變的,其他三個都可以根據需要操作變動,

mark()方法用來記錄備忘位置,設定mark = position,

reset()設定position = mark ,

flip() 方法 原始碼如下:

public final buffer flip()

put() position+1

get() position + 1

hasremaining()方法,判斷是否到達上界

public final boolean hasremaining()

原子操作原理分析

原子操作是指不被打斷的操作,即它是最小的執行單位。最簡單的原子操作就是一條條的彙編指令 不包括一些偽指令,偽指令會被彙編器解釋成多條彙編指令 在 linux 中原子操作對應的資料結構為 atomic t,定義如下 typedef struct atomic t 本質上就是乙個整型變數,之所以定義這麼...

git原理及操作

git是乙個開源的分布式版本控制軟體。github gitlab是基於git的運程檔案託管平台。正常提交流程 git把管理的檔案分為兩個區域四種狀態 工作區 當前開發程式所在目錄稱為工作區,即 工作開發都是在該目錄,該區域的檔案會有狀態的變化且狀態由git自動檢測,如果程式中檔案做任何操作 增 刪 ...

for迴圈原理及操作

for迴圈是程式語言中一種迴圈語句,迴圈語句由迴圈體及迴圈的判定條件兩部分組成。js例項 for var i 0 i 100 i 變數初始化var i 1 迴圈條件 i 100 迴圈語句塊console.log i 迴圈變化 i 上述 會迴圈輸出0 99的數值 var i 1 此時i的值為1,迴圈條...