鴻蒙OS MessageParcel

2022-04-27 16:00 更新

MessageParcel

java.lang.Object

|---ohos.utils.Parcel

|---|---ohos.rpc.MessageParcel

public class MessageParcel
extends Parcel

繼承自 Parcel 類并提供管理 MessageParcel 對(duì)象的方法。

此類提供讀寫對(duì)象、接口令牌、文件描述符和大數(shù)據(jù)的方法。

方法總結(jié)

修飾符和類型 方法 描述
static void closeFileDescriptor(FileDescriptor descriptor) 禁用 MessageParcel 中的文件描述符。
boolean containFileDescriptors() 檢查此 MessageParcel 對(duì)象是否包含文件描述符。
static MessageParcel create() 創(chuàng)建一個(gè) MessageParcel 對(duì)象。
static MessageParcel create(long object) 創(chuàng)建具有給定指針的 MessageParcel 對(duì)象。
IRemoteObject[] createRemoteObjectArray() 創(chuàng)建一個(gè) IRemoteObject 對(duì)象數(shù)組。
ListIRemoteObject createRemoteObjectList() 創(chuàng)建 IRemoteObject 對(duì)象的列表。
static int detachFd(FileDescriptor fileDescriptor) 從 FileDescriptor 中分離本機(jī) fd。
static FileDescriptor dupFileDescriptor(FileDescriptor descriptor) 獲得一個(gè)新的文件描述符,它是現(xiàn)有文件描述符的副本。
protected void finalize() 當(dāng)垃圾收集確定不再有對(duì)該對(duì)象的引用時(shí),由對(duì)象上的垃圾收集器調(diào)用。
int getDataVersion() 從 MessageParcel 對(duì)象返回?cái)?shù)據(jù)版本。
static int getFd(FileDescriptor fileDescriptor) 從 FileDescriptor 讀取本機(jī) fd
static FileDescriptor getFdFromDatagramSocket(DatagramSocket datagramSocket) 從 DatagramSocket 讀取 FileDescriptor
int getRawDataCapacity() 獲取 MessageParcel 可以容納的最大原始數(shù)據(jù)量。
static MessageParcel obtain() 創(chuàng)建一個(gè) MessageParcel 對(duì)象。
static MessageParcel obtain(long object) 獲取具有給定指針的 MessageParcel 對(duì)象。
Ashmem readAshmem() 從此 MessageParcel 中讀取 Ashmem 對(duì)象。
void readException() 從 MessageParcel 中讀取異常。
FileDescriptor readFileDescriptor() 從 MessageParcel 讀取文件描述符。
String readInterfaceToken() 從 MessageParcel 讀取接口令牌。
byte[] readRawData(int size) 從 MessageParcel 讀取原始數(shù)據(jù)。
IRemoteObject readRemoteObject() 從 MessageParcel 讀取遠(yuǎn)程對(duì)象。
void readRemoteObjectArray(IRemoteObject[] objects) 從 MessageParcel 中讀取一組 IRemoteObject 對(duì)象。
void readRemoteObjectList(ListIRemoteObject objects) 從 MessageParcel 中讀取 IRemoteObject 對(duì)象的列表。
void reclaim() 將 MessageParcel 對(duì)象添加到緩存池。
void updateDataVersion(IRemoteObject object) 將遠(yuǎn)程對(duì)象數(shù)據(jù)版本更新為 MessageParcel 對(duì)象。
boolean writeAshmem(Ashmem ashmem) 將指定的 Ashmem 對(duì)象寫入此 MessageParcel。
void writeException(Exception exception) 將異常寫入 MessageParcel。
boolean writeFileDescriptor(FileDescriptor descriptor) 序列化文件描述符并將其寫入 MessageParcel。
boolean writeInterfaceToken(String token) 將接口令牌寫入 MessageParcel 對(duì)象。
void writeNoException() 不向 MessageParcel 寫入異常。
boolean writeRawData(byte[] rawData, int size) 將要發(fā)送到遠(yuǎn)程進(jìn)程的原始數(shù)據(jù)寫入 MessageParcel 對(duì)象。
boolean writeRemoteObject(IRemoteObject object) 序列化遠(yuǎn)程對(duì)象并將其寫入 MessageParcel 對(duì)象。
boolean writeRemoteObjectArray(IRemoteObject[] objects) 將 IRemoteObject 對(duì)象數(shù)組寫入 MessageParcel。
boolean writeRemoteObjectList(ListIRemoteObject objects) 將 IRemoteObject 對(duì)象列表寫入 MessageParcel。
從類 java.lang.Object 繼承的方法
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
從類 ohos.utils.Parcel 繼承的方法
addAppClassLoader, appendFrom, createSequenceable, createSequenceable, createSequenceableArray, flushBuffer, getBytes, getCapacity, getReadableBytes, getReadPosition, getSize, getWritableBytes, getWritePosition, readBoolean, readBooleanArray, readBooleanArray, readByte, readByteArray, readByteArray, readChar, readCharArray, readCharArray, readDouble, readDoubleArray, readDoubleArray, readFloat, readFloatArray, readFloatArray, readInt, readIntArray, readIntArray, readList, readLong, readLongArray, readLongArray, readMap, readPacMapEx, readParcelableEx, readPlainArray, readPlainBooleanArray, readSequenceable, readSequenceableArray, readSequenceableList, readSequenceableMap, readSerializable, readShort, readShortArray, readShortArray, readString, readStringArray, readStringArray, readStringList, readValue, rewindRead, rewindWrite, setCapacity, setSize, writeBoolean, writeBooleanArray, writeByte, writeByteArray, writeBytes, writeChar, writeCharArray, writeDouble, writeDoubleArray, writeFloat, writeFloatArray, writeInt, writeIntArray, writeList, writeLong, writeLongArray, writeMap, writeMap, writePacMapEx, writeParcelableEx, writePlainArray, writePlainBooleanArray, writeSequenceable, writeSequenceableArray, writeSequenceableList, writeSequenceableMap, writeSerializable, writeShort, writeShortArray, writeString, writeStringArray, writeStringList, writeTypedSequenceable, writeTypedSequenceableArray, writeValue

方法詳情

obtain

public static final MessageParcel obtain()

創(chuàng)建一個(gè) MessageParcel 對(duì)象。

返回:

返回創(chuàng)建的 MessageParcel 對(duì)象。

create

public static final MessageParcel create()

創(chuàng)建一個(gè) MessageParcel 對(duì)象。

返回:

返回創(chuàng)建的 MessageParcel 對(duì)象。

finalize

protected void finalize() 拋出 Throwable

從類復(fù)制的描述:對(duì)象

當(dāng)垃圾收集確定不再有對(duì)該對(duì)象的引用時(shí),由對(duì)象上的垃圾收集器調(diào)用。子類覆蓋 finalize 方法以釋放系統(tǒng)資源或執(zhí)行其他清理。

finalize 的一般約定是,當(dāng) Java? 虛擬機(jī)確定不再有任何方法可以讓任何尚未終止的線程訪問此對(duì)象時(shí)調(diào)用它,除非是由于某個(gè)操作由準(zhǔn)備完成的其他對(duì)象或類的完成所采取。 finalize 方法可以采取任何行動(dòng),包括使該對(duì)象再次可供其他線程使用;然而,finalize 的通常目的是在對(duì)象被不可撤銷地丟棄之前執(zhí)行清理操作。例如,代表輸入/輸出連接的對(duì)象的 finalize 方法可能會(huì)執(zhí)行顯式 I/O 事務(wù)以在對(duì)象被永久丟棄之前中斷連接。

Object 類的 finalize 方法不執(zhí)行任何特殊操作;它只是正常返回。 Object 的子類可以覆蓋這個(gè)定義。

Java 編程語言不保證哪個(gè)線程將為任何給定對(duì)象調(diào)用 finalize 方法。但是,可以保證調(diào)用 finalize 的線程在調(diào)用 finalize 時(shí)不會(huì)持有任何用戶可見的同步鎖。如果 finalize 方法拋出未捕獲的異常,則忽略該異常并終止該對(duì)象的終結(jié)。

在為一個(gè)對(duì)象調(diào)用 finalize 方法之后,不會(huì)采取進(jìn)一步的行動(dòng),直到 Java 虛擬機(jī)再次確定沒有任何方法可以讓任何尚未終止的線程訪問該對(duì)象,包括可能的行動(dòng)由其他準(zhǔn)備完成的對(duì)象或類,此時(shí)該對(duì)象可能被丟棄。

對(duì)于任何給定的對(duì)象,Java 虛擬機(jī)永遠(yuǎn)不會(huì)多次調(diào)用 finalize 方法。

finalize 方法拋出的任何異常都會(huì)導(dǎo)致該對(duì)象的終結(jié)被暫停,否則會(huì)被忽略。

覆蓋:

在 Parcel 類中完成

Throws:

Throw名稱 Throw描述
Throwable 此方法引發(fā)的異常

obtain

public static MessageParcel obtain(long object)

獲取具有給定指針的 MessageParcel 對(duì)象。

參數(shù):

參數(shù)名稱 參數(shù)描述
object 指示 MessageParcel 的地址。

返回:

如果在緩存池中找到具有指定索引的 MessageParcel 對(duì)象,則返回該對(duì)象; 如果未找到,則返回具有指定索引的新 MessageParcel 對(duì)象。

create

public static MessageParcel create(long object)

創(chuàng)建具有給定指針的 MessageParcel 對(duì)象。

參數(shù):

參數(shù)名稱 參數(shù)描述
object 指示 MessageParcel 的地址。

返回:

如果在緩存池中找到具有給定指針的 MessageParcel 對(duì)象,則返回該對(duì)象; 如果未找到,則返回具有給定指針的新 MessageParcel 對(duì)象。

reclaim

public final void reclaim()

將 MessageParcel 對(duì)象添加到緩存池。

此方法用于清除不再使用的 MessageParcel 對(duì)象。

覆蓋:

在類包裹中回收

updateDataVersion

public void updateDataVersion(IRemoteObject object)

將遠(yuǎn)程對(duì)象數(shù)據(jù)版本更新為 MessageParcel 對(duì)象。

參數(shù):

參數(shù)名稱 參數(shù)描述
object 指示寫入 MessageParcel 的遠(yuǎn)程對(duì)象及其數(shù)據(jù)版本。

getDataVersion

public int getDataVersion()

從 MessageParcel 對(duì)象返回?cái)?shù)據(jù)版本。

返回:

從 MessageParcel 返回?cái)?shù)據(jù)版本。

writeRemoteObject

public boolean writeRemoteObject(IRemoteObject object)

序列化遠(yuǎn)程對(duì)象并將其寫入 MessageParcel 對(duì)象。

參數(shù):

參數(shù)名稱 參數(shù)描述
object 指示要序列化并寫入 MessageParcel 的遠(yuǎn)程對(duì)象。

返回:

如果操作成功,則返回 true; 否則返回 false。

readRemoteObject

public IRemoteObject readRemoteObject()

從 MessageParcel 讀取遠(yuǎn)程對(duì)象。

此方法用于反序列化 MessageParcel 對(duì)象以生成 IRemoteObject。

遠(yuǎn)程對(duì)象按照它們寫入 MessageParcel 的順序讀取。

返回:

返回 IRemoteObject。

writeInterfaceToken

public boolean writeInterfaceToken(String token)

將接口令牌寫入 MessageParcel 對(duì)象。

參數(shù):

參數(shù)名稱 參數(shù)描述
token 表示接口令牌。

返回:

如果操作成功,則返回 true; 否則返回 false。

readInterfaceToken

public String readInterfaceToken()

從 MessageParcel 讀取接口令牌。

接口標(biāo)記按照它們寫入 MessageParcel 的順序讀取。

返回:

返回接口令牌。

writeFileDescriptor

public boolean writeFileDescriptor(FileDescriptor descriptor)

序列化文件描述符并將其寫入 MessageParcel。

在當(dāng)前版本中,此方法不適用于跨設(shè)備通信。

參數(shù):

參數(shù)名稱 參數(shù)描述
descriptor 指示文件描述符。

返回:

如果操作成功,則返回 true; 否則返回 false。

readFileDescriptor

public FileDescriptor readFileDescriptor()

從 MessageParcel 讀取文件描述符。

文件描述符按照它們寫入 MessageParcel 的順序讀取。

在當(dāng)前版本中,此方法不適用于跨設(shè)備通信。

返回:

返回文件描述符。

writeRawData

public boolean writeRawData(byte[] rawData, int size)

將要發(fā)送到遠(yuǎn)程進(jìn)程的原始數(shù)據(jù)寫入 MessageParcel 對(duì)象。

如果遠(yuǎn)程進(jìn)程在當(dāng)前設(shè)備上運(yùn)行,原始數(shù)據(jù)將通過共享內(nèi)存?zhèn)鬏敗?如果遠(yuǎn)程進(jìn)程在對(duì)等設(shè)備上運(yùn)行,則原始數(shù)據(jù)通過套接字等跨設(shè)備通道傳輸。

每個(gè) MessageParcel 只能寫入一組原始數(shù)據(jù)。 在跨設(shè)備情況下,原始數(shù)據(jù)只能按順序發(fā)送。

參數(shù):

參數(shù)名稱 參數(shù)描述
rawData 指示要發(fā)送到遠(yuǎn)程進(jìn)程的原始數(shù)據(jù)。 通過 IPC 最多可以發(fā)送 128 Mb 的原始數(shù)據(jù),在 RPC 情況下最大為 128 Mb - 64byte。 如果數(shù)據(jù)大小大于最大值,則返回 false。 您必須自己管理數(shù)據(jù)內(nèi)存的生命周期。
size 指示要發(fā)送的原始數(shù)據(jù)的大小。

返回:

如果操作成功,則返回 true; 否則返回 false。

readRawData

public byte[] readRawData(int size)

從 MessageParcel 讀取原始數(shù)據(jù)。

要讀取的原始數(shù)據(jù)的大小必須與寫入 MessageParcel 的原始數(shù)據(jù)的大小相同。

原始數(shù)據(jù)按照寫入 MessageParcel 的順序讀取。

參數(shù):

參數(shù)名稱 參數(shù)描述
size 指示要讀取的原始數(shù)據(jù)的大小。

返回:

返回原始數(shù)據(jù)(以字節(jié)為單位)。 數(shù)據(jù)內(nèi)存的生命周期必須與 MessageParcel 對(duì)象的生命周期相同。

getRawDataCapacity

public int getRawDataCapacity()

獲取 MessageParcel 可以容納的最大原始數(shù)據(jù)量。

返回:

返回 MessageParcel 可以容納的最大原始數(shù)據(jù)量,即 128 Mb。

closeFileDescriptor

public static void closeFileDescriptor(FileDescriptor descriptor)

禁用 MessageParcel 中的文件描述符。

在當(dāng)前版本中,此方法不適用于跨設(shè)備通信。

參數(shù):

參數(shù)名稱 參數(shù)描述
descriptor 指示要禁用的文件描述符。

dupFileDescriptor

public static FileDescriptor dupFileDescriptor(FileDescriptor descriptor)

獲得一個(gè)新的文件描述符,它是現(xiàn)有文件描述符的副本。

新文件描述符的狀態(tài)與現(xiàn)有文件描述符的狀態(tài)相同。

調(diào)用此方法不會(huì)關(guān)閉輸入文件描述符。 您負(fù)責(zé)關(guān)閉返回的新文件描述符。

在當(dāng)前版本中,此方法不適用于跨設(shè)備通信。

參數(shù):

參數(shù)名稱 參數(shù)描述
descriptor 指示現(xiàn)有文件描述符。

返回:

返回新的文件描述符。

containFileDescriptors

public boolean containFileDescriptors()

檢查此 MessageParcel 對(duì)象是否包含文件描述符。

在調(diào)用 writeFileDescriptor 或 writeRawData 方法后,MessageParcel 對(duì)象將包含文件描述符。

返回:

如果此 MessageParcel 對(duì)象包含文件描述符,則返回 true; 否則返回 false。

createRemoteObjectArray

public IRemoteObject[] createRemoteObjectArray()

創(chuàng)建一個(gè) IRemoteObject 對(duì)象數(shù)組。

此方法用于從 MessageParcel 中讀取 IRemoteObject 對(duì)象并創(chuàng)建一個(gè) IRemoteObject 對(duì)象數(shù)組。

返回:

返回 IRemoteObject 對(duì)象的數(shù)組。 陣列的生命周期取決于您的應(yīng)用程序。

createRemoteObjectList

public ListIRemoteObject createRemoteObjectList()

創(chuàng)建 IRemoteObject 對(duì)象的列表。

此方法用于從 MessageParcel 中讀取 IRemoteObject 對(duì)象并創(chuàng)建 IRemoteObject 對(duì)象列表。

返回:

返回 IRemoteObject 對(duì)象的列表。 列表的生命周期取決于您的應(yīng)用程序。

writeRemoteObjectArray

public boolean writeRemoteObjectArray(IRemoteObject[] objects)

將 IRemoteObject 對(duì)象數(shù)組寫入 MessageParcel。

您可以使用 createRemoteObjectArray() 或 [readRemoteObjectArray(ohos.rpc.IRemoteObject]) 方法從 MessageParcel 中讀取 IRemoteObject 對(duì)象數(shù)組。

參數(shù):

參數(shù)名稱 參數(shù)描述
objects 指示要寫入 MessageParcel 的 IRemoteObject 對(duì)象數(shù)組。

返回:

如果 IRemoteObject 對(duì)象數(shù)組成功寫入 MessageParcel,則返回 true; 如果 objects 為 null 或數(shù)組無法寫入 MessageParcel,則返回 false。

writeRemoteObjectList

public boolean writeRemoteObjectList(ListIRemoteObject objects)

將 IRemoteObject 對(duì)象列表寫入 MessageParcel。

您可以使用 createRemoteObjectList() 或 readRemoteObjectList(java.util.List) 方法從 MessageParcel 中讀取 IRemoteObject 對(duì)象列表。

參數(shù):

參數(shù)名稱 參數(shù)描述
objects 指示要寫入 MessageParcel 的 IRemoteObject 對(duì)象的列表。

返回:

如果 IRemoteObject 對(duì)象列表成功寫入 MessageParcel,則返回 true; 如果 objects 為 null 或列表無法寫入 MessageParcel,則返回 false。

readRemoteObjectArray

public void readRemoteObjectArray(IRemoteObject[] objects)

從 MessageParcel 中讀取一組 IRemoteObject 對(duì)象。

使用此方法時(shí),您的應(yīng)用程序需要傳遞要從 MessageParcel 中讀取的 IRemoteObject 對(duì)象數(shù)組。

參數(shù):

參數(shù)名稱 參數(shù)描述
objects 指示應(yīng)用程序要從 MessageParcel 中讀取的 IRemoteObject 對(duì)象數(shù)組。 如果此數(shù)組的長度不等于實(shí)際從 MessageParcel 讀取的 IRemoteObject 對(duì)象的數(shù)量,則將返回您的應(yīng)用程序傳遞的 IRemoteObject 對(duì)象數(shù)組。

readRemoteObjectList

public void readRemoteObjectList(ListIRemoteObject objects)

從 MessageParcel 中讀取 IRemoteObject 對(duì)象的列表。

使用此方法時(shí),您的應(yīng)用程序需要傳遞要從 MessageParcel 中讀取的 IRemoteObject 對(duì)象列表。

參數(shù):

參數(shù)名稱 參數(shù)描述
objects 指示您的應(yīng)用程序要從 MessageParcel 中讀取的 IRemoteObject 對(duì)象列表。 不管這個(gè)列表的長度是大于還是小于從MessageParcel中實(shí)際讀取的IRemoteObject對(duì)象的個(gè)數(shù),都會(huì)返回一個(gè)從MessageParcel中實(shí)際讀取的IRemoteObject對(duì)象的列表。

writeException

public void writeException(Exception exception)

將異常寫入 MessageParcel。

支持的異常包括 SecurityException、IllegalArgumentException、NullPointerException、IllegalStateException、UnsupportedOperationException、IndexOutOfBoundsException、NegativeArraySizeException、ArrayStoreException、ClassCastException 和 RemoteException。 如果向 MessageParcel 寫入任何其他異常,將返回 RuntimeException。

此方法通常在響應(yīng)接收到的數(shù)據(jù)包時(shí)使用。

參數(shù):

參數(shù)名稱 參數(shù)描述
exception 指示寫入 MessageParcel 的異常。

writeNoException

public void writeNoException()

不向 MessageParcel 寫入異常。

readException

public void readException()

從 MessageParcel 中讀取異常。

將拋出異常讀取。

此方法通常在讀取響應(yīng)數(shù)據(jù)包時(shí)使用。

Throws:

Throw 名稱 Throw描述
Exception 引發(fā)從 MessageParcel 讀取的異常。 異常可以是 SecurityException、IllegalArgumentException、NullPointerException、IllegalStateException、UnsupportedOperationException、IndexOutOfBoundsException、NegativeArraySizeException、ArrayStoreException、ClassCastException 或 RemoteException。

getFdFromDatagramSocket

public static FileDescriptor getFdFromDatagramSocket(DatagramSocket datagramSocket)

從 DatagramSocket 讀取 FileDescriptor

從指定的 DatagramSocket 創(chuàng)建一個(gè)新的文件描述符。 新的文件描述符保存了 DatagramSocket 中原始文件描述符的副本,因此您負(fù)責(zé)關(guān)閉返回的新文件描述符。

參數(shù):

參數(shù)名稱 參數(shù)描述
datagramSocket 指示要獲取 FileDescriptor 的 DatagramSocket。

返回:

返回一個(gè)文件描述符。

getFd

public static int getFd(FileDescriptor fileDescriptor)

從 FileDescriptor 讀取本機(jī) fd

參數(shù):

參數(shù)名稱 參數(shù)描述
fileDescriptor 指示獲取 fd 的 FileDescriptor。

返回:

如果它不為空,則返回給定 FileDescriptor 的 fd; 否則返回 -1。

detachFd

public static int detachFd(FileDescriptor fileDescriptor)

從 FileDescriptor 中分離本機(jī) fd。

現(xiàn)在您有責(zé)任關(guān)閉本機(jī) fd 或發(fā)生 fd 泄漏。

當(dāng)描述符的原始創(chuàng)建者希望關(guān)閉 FileDescriptor 本身時(shí),您不能調(diào)用該方法。

參數(shù):

參數(shù)名稱 參數(shù)描述
fileDescriptor FileDescriptor 來分離 fd。

返回:

如果 fd 從給定的 FileDescriptor 中成功分離,則返回一個(gè) fd; 否則返回 -1。

writeAshmem

public boolean writeAshmem(Ashmem ashmem)

將指定的 Ashmem 對(duì)象寫入此 MessageParcel。

參數(shù):

參數(shù)名稱 參數(shù)描述
ashmem 指示要寫入此 MessageParcel 的 Ashmem 對(duì)象。

返回:

如果 Ashmem 對(duì)象成功寫入此 MessageParcel,則返回 true; 否則返回 false。

readAshmem

public Ashmem readAshmem()

從此 MessageParcel 中讀取 Ashmem 對(duì)象。

返回:

返回 Ashmem 對(duì)象。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)