程序間資料傳遞載體——Parcel(一)
前段時間參與一個專案關於程序間通訊,看人家的程式碼中Parcel用的各種6,可是咱看不懂呀!所以只好在查些資料咯!
所謂Parcel英文直譯就是“打包”的意思。如果程序間通訊直接傳遞引用物件,這樣也只是傳遞了物件的記憶體地址,這樣的行為是
行不通的,畢竟兩個程序間的虛擬記憶體是不同的。但是我通過Parcel將記憶體地址中儲存的資料打包呢。。這樣就可以把資料傳遞過去了!
下面介紹下Parcel相關的方法:
dataSize();獲取當前已經儲存的資料大小。
setDataCapacity(int size);設定Parcel的空間大小,顯然儲存的資料不能大於這個值。
setDataPosition(int pos);改變Parcel中的讀寫位置,必須介於0和dataSize()之間。
dataAvail():當前Parcel中的可讀資料大小。
dataCapacity():當前Parcel的儲存能力。
dataPosition():資料當前位置值,類似遊標。
Primitives
原始型別資料的讀寫操作:
writeByte(byte):寫入一個byte;
readByte():讀取一個byte;
writeDouble(double) :寫入一個double
readDouble();讀取一個double.
從上面看出讀寫是配套的。資料是按照host cpu的位元組序來讀寫的
Primitives Arrays
原始資料型別陣列的讀寫操作通常是先寫入用4個位元組表示的資料大小值,接著才寫入資料本身。另外,使用者既可以選擇將資料讀入現有的陣列空間中,也可以讓Parcel返回一個新的陣列。
writeBoolenArray(boolean[ ] ):寫入布林陣列。
readBooleanArray(boolean[ ]):讀入布林陣列。
boolean[ ] createBooleanArray():讀取並返回一個布林陣列。’
writeByteArray(byte[ ]):寫入位元組陣列。
writeByteArray(byte[ ],int ,int):和上面幾個不同的是,這個函式最後面的兩個引數分別是表示陣列中需要被寫入的資料起點以及需要寫入多少。
readByteArray(byte[ ]):讀取位元組陣列。
byte[ ] createByteArray():讀取並返回一個數組
***** 如果寫入資料的時候系統發現已經超出了Parcel的儲存能力,它會自動申請所需的記憶體控制元件,並擴充套件dataCapacity;並且每次寫入都是從dataPosition()開始的。