树叶云鸿蒙OS教程:鸿蒙OS MessageParcel

MessageParcel

java.lang.Object

|—ohos.utils.Parcel

|—|—ohos.rpc.MessageParcel

public class MessageParcel
extends Parcel

继承自 Parcel 类并提供管理 MessageParcel 对象的方法。

此类提供读写对象、接口令牌、文件描述符和大数据的方法。

方法总结

修饰符和类型方法描述
static voidcloseFileDescriptor(FileDescriptor descriptor)禁用 MessageParcel 中的文件描述符。
booleancontainFileDescriptors()检查此 MessageParcel 对象是否包含文件描述符。
static MessageParcelcreate()创建一个 MessageParcel 对象。
static MessageParcelcreate(long object)创建具有给定指针的 MessageParcel 对象。
IRemoteObject[]createRemoteObjectArray()创建一个 IRemoteObject 对象数组。
ListIRemoteObjectcreateRemoteObjectList()创建 IRemoteObject 对象的列表。
static intdetachFd(FileDescriptor fileDescriptor)从 FileDescriptor 中分离本机 fd。
static FileDescriptordupFileDescriptor(FileDescriptor descriptor)获得一个新的文件描述符,它是现有文件描述符的副本。
protected voidfinalize()当垃圾收集确定不再有对该对象的引用时,由对象上的垃圾收集器调用。
intgetDataVersion()从 MessageParcel 对象返回数据版本。
static intgetFd(FileDescriptor fileDescriptor)从 FileDescriptor 读取本机 fd
static FileDescriptorgetFdFromDatagramSocket(DatagramSocket datagramSocket)从 DatagramSocket 读取 FileDescriptor
intgetRawDataCapacity()获取 MessageParcel 可以容纳的最大原始数据量。
static MessageParcelobtain()创建一个 MessageParcel 对象。
static MessageParcelobtain(long object)获取具有给定指针的 MessageParcel 对象。
AshmemreadAshmem()从此 MessageParcel 中读取 Ashmem 对象。
voidreadException()从 MessageParcel 中读取异常。
FileDescriptorreadFileDescriptor()从 MessageParcel 读取文件描述符。
StringreadInterfaceToken()从 MessageParcel 读取接口令牌。
byte[]readRawData(int size)从 MessageParcel 读取原始数据。
IRemoteObjectreadRemoteObject()从 MessageParcel 读取远程对象。
voidreadRemoteObjectArray(IRemoteObject[] objects)从 MessageParcel 中读取一组 IRemoteObject 对象。
voidreadRemoteObjectList(ListIRemoteObject objects)从 MessageParcel 中读取 IRemoteObject 对象的列表。
voidreclaim()将 MessageParcel 对象添加到缓存池。
voidupdateDataVersion(IRemoteObject object)将远程对象数据版本更新为 MessageParcel 对象。
booleanwriteAshmem(Ashmem ashmem)将指定的 Ashmem 对象写入此 MessageParcel。
voidwriteException(Exception exception)将异常写入 MessageParcel。
booleanwriteFileDescriptor(FileDescriptor descriptor)序列化文件描述符并将其写入 MessageParcel。
booleanwriteInterfaceToken(String token)将接口令牌写入 MessageParcel 对象。
voidwriteNoException()不向 MessageParcel 写入异常。
booleanwriteRawData(byte[] rawData, int size)将要发送到远程进程的原始数据写入 MessageParcel 对象。
booleanwriteRemoteObject(IRemoteObject object)序列化远程对象并将其写入 MessageParcel 对象。
booleanwriteRemoteObjectArray(IRemoteObject[] objects)将 IRemoteObject 对象数组写入 MessageParcel。
booleanwriteRemoteObjectList(ListIRemoteObject objects)将 IRemoteObject 对象列表写入 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()

创建一个 MessageParcel 对象。

返回:

返回创建的 MessageParcel 对象。

create

public static final MessageParcel create()

创建一个 MessageParcel 对象。

返回:

返回创建的 MessageParcel 对象。

finalize

protected void finalize() 抛出 Throwable

从类复制的描述:对象

当垃圾收集确定不再有对该对象的引用时,由对象上的垃圾收集器调用。子类覆盖 finalize 方法以释放系统资源或执行其他清理。

finalize 的一般约定是,当 Java™ 虚拟机确定不再有任何方法可以让任何尚未终止的线程访问此对象时调用它,除非是由于某个操作由准备完成的其他对象或类的完成所采取。 finalize 方法可以采取任何行动,包括使该对象再次可供其他线程使用;然而,finalize 的通常目的是在对象被不可撤销地丢弃之前执行清理操作。例如,代表输入/输出连接的对象的 finalize 方法可能会执行显式 I/O 事务以在对象被永久丢弃之前中断连接。

Object 类的 finalize 方法不执行任何特殊操作;它只是正常返回。 Object 的子类可以覆盖这个定义。

Java 编程语言不保证哪个线程将为任何给定对象调用 finalize 方法。但是,可以保证调用 finalize 的线程在调用 finalize 时不会持有任何用户可见的同步锁。如果 finalize 方法抛出未捕获的异常,则忽略该异常并终止该对象的终结。

在为一个对象调用 finalize 方法之后,不会采取进一步的行动,直到 Java 虚拟机再次确定没有任何方法可以让任何尚未终止的线程访问该对象,包括可能的行动由其他准备完成的对象或类,此时该对象可能被丢弃。

对于任何给定的对象,Java 虚拟机永远不会多次调用 finalize 方法。

finalize 方法抛出的任何异常都会导致该对象的终结被暂停,否则会被忽略。

覆盖:

在 Parcel 类中完成

Throws:

Throw名称Throw描述
Throwable此方法引发的异常

obtain

public static MessageParcel obtain(long object)

获取具有给定指针的 MessageParcel 对象。

参数:

参数名称参数描述
object指示 MessageParcel 的地址。

返回:

如果在缓存池中找到具有指定索引的 MessageParcel 对象,则返回该对象; 如果未找到,则返回具有指定索引的新 MessageParcel 对象。

create

public static MessageParcel create(long object)

创建具有给定指针的 MessageParcel 对象。

参数:

参数名称参数描述
object指示 MessageParcel 的地址。

返回:

如果在缓存池中找到具有给定指针的 MessageParcel 对象,则返回该对象; 如果未找到,则返回具有给定指针的新 MessageParcel 对象。

reclaim

public final void reclaim()

将 MessageParcel 对象添加到缓存池。

此方法用于清除不再使用的 MessageParcel 对象。

覆盖:

在类包裹中回收

updateDataVersion

public void updateDataVersion(IRemoteObject object)

将远程对象数据版本更新为 MessageParcel 对象。

参数:

参数名称参数描述
object指示写入 MessageParcel 的远程对象及其数据版本。

getDataVersion

public int getDataVersion()

从 MessageParcel 对象返回数据版本。

返回:

从 MessageParcel 返回数据版本。

writeRemoteObject

public boolean writeRemoteObject(IRemoteObject object)

序列化远程对象并将其写入 MessageParcel 对象。

参数:

参数名称参数描述
object指示要序列化并写入 MessageParcel 的远程对象。

返回:

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

readRemoteObject

public IRemoteObject readRemoteObject()

从 MessageParcel 读取远程对象。

此方法用于反序列化 MessageParcel 对象以生成 IRemoteObject。

远程对象按照它们写入 MessageParcel 的顺序读取。

返回:

返回 IRemoteObject。

writeInterfaceToken

public boolean writeInterfaceToken(String token)

将接口令牌写入 MessageParcel 对象。

参数:

参数名称参数描述
token表示接口令牌。

返回:

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

readInterfaceToken

public String readInterfaceToken()

从 MessageParcel 读取接口令牌。

接口标记按照它们写入 MessageParcel 的顺序读取。

返回:

返回接口令牌。

writeFileDescriptor

public boolean writeFileDescriptor(FileDescriptor descriptor)

序列化文件描述符并将其写入 MessageParcel。

在当前版本中,此方法不适用于跨设备通信。

参数:

参数名称参数描述
descriptor指示文件描述符。

返回:

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

readFileDescriptor

public FileDescriptor readFileDescriptor()

从 MessageParcel 读取文件描述符。

文件描述符按照它们写入 MessageParcel 的顺序读取。

在当前版本中,此方法不适用于跨设备通信。

返回:

返回文件描述符。

writeRawData

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

将要发送到远程进程的原始数据写入 MessageParcel 对象。

如果远程进程在当前设备上运行,原始数据将通过共享内存传输。 如果远程进程在对等设备上运行,则原始数据通过套接字等跨设备通道传输。

每个 MessageParcel 只能写入一组原始数据。 在跨设备情况下,原始数据只能按顺序发送。

参数:

参数名称参数描述
rawData指示要发送到远程进程的原始数据。 通过 IPC 最多可以发送 128 Mb 的原始数据,在 RPC 情况下最大为 128 Mb – 64byte。 如果数据大小大于最大值,则返回 false。 您必须自己管理数据内存的生命周期。
size指示要发送的原始数据的大小。

返回:

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

readRawData

public byte[] readRawData(int size)

从 MessageParcel 读取原始数据。

要读取的原始数据的大小必须与写入 MessageParcel 的原始数据的大小相同。

原始数据按照写入 MessageParcel 的顺序读取。

参数:

参数名称参数描述
size指示要读取的原始数据的大小。

返回:

返回原始数据(以字节为单位)。 数据内存的生命周期必须与 MessageParcel 对象的生命周期相同。

getRawDataCapacity

public int getRawDataCapacity()

获取 MessageParcel 可以容纳的最大原始数据量。

返回:

返回 MessageParcel 可以容纳的最大原始数据量,即 128 Mb。

closeFileDescriptor

public static void closeFileDescriptor(FileDescriptor descriptor)

禁用 MessageParcel 中的文件描述符。

在当前版本中,此方法不适用于跨设备通信。

参数:

参数名称参数描述
descriptor指示要禁用的文件描述符。

dupFileDescriptor

public static FileDescriptor dupFileDescriptor(FileDescriptor descriptor)

获得一个新的文件描述符,它是现有文件描述符的副本。

新文件描述符的状态与现有文件描述符的状态相同。

调用此方法不会关闭输入文件描述符。 您负责关闭返回的新文件描述符。

在当前版本中,此方法不适用于跨设备通信。

参数:

参数名称参数描述
descriptor指示现有文件描述符。

返回:

返回新的文件描述符。

containFileDescriptors

public boolean containFileDescriptors()

检查此 MessageParcel 对象是否包含文件描述符。

在调用 writeFileDescriptor 或 writeRawData 方法后,MessageParcel 对象将包含文件描述符。

返回:

如果此 MessageParcel 对象包含文件描述符,则返回 true; 否则返回 false。

createRemoteObjectArray

public IRemoteObject[] createRemoteObjectArray()

创建一个 IRemoteObject 对象数组。

此方法用于从 MessageParcel 中读取 IRemoteObject 对象并创建一个 IRemoteObject 对象数组。

返回:

返回 IRemoteObject 对象的数组。 阵列的生命周期取决于您的应用程序。

createRemoteObjectList

public ListIRemoteObject createRemoteObjectList()

创建 IRemoteObject 对象的列表。

此方法用于从 MessageParcel 中读取 IRemoteObject 对象并创建 IRemoteObject 对象列表。

返回:

返回 IRemoteObject 对象的列表。 列表的生命周期取决于您的应用程序。

writeRemoteObjectArray

public boolean writeRemoteObjectArray(IRemoteObject[] objects)

将 IRemoteObject 对象数组写入 MessageParcel。

您可以使用 createRemoteObjectArray() 或 [readRemoteObjectArray(ohos.rpc.IRemoteObject]) 方法从 MessageParcel 中读取 IRemoteObject 对象数组。

参数:

参数名称参数描述
objects指示要写入 MessageParcel 的 IRemoteObject 对象数组。

返回:

如果 IRemoteObject 对象数组成功写入 MessageParcel,则返回 true; 如果 objects 为 null 或数组无法写入 MessageParcel,则返回 false。

writeRemoteObjectList

public boolean writeRemoteObjectList(ListIRemoteObject objects)

将 IRemoteObject 对象列表写入 MessageParcel。

您可以使用 createRemoteObjectList() 或 readRemoteObjectList(java.util.List) 方法从 MessageParcel 中读取 IRemoteObject 对象列表。

参数:

参数名称参数描述
objects指示要写入 MessageParcel 的 IRemoteObject 对象的列表。

返回:

如果 IRemoteObject 对象列表成功写入 MessageParcel,则返回 true; 如果 objects 为 null 或列表无法写入 MessageParcel,则返回 false。

readRemoteObjectArray

public void readRemoteObjectArray(IRemoteObject[] objects)

从 MessageParcel 中读取一组 IRemoteObject 对象。

使用此方法时,您的应用程序需要传递要从 MessageParcel 中读取的 IRemoteObject 对象数组。

参数:

参数名称参数描述
objects指示应用程序要从 MessageParcel 中读取的 IRemoteObject 对象数组。 如果此数组的长度不等于实际从 MessageParcel 读取的 IRemoteObject 对象的数量,则将返回您的应用程序传递的 IRemoteObject 对象数组。

readRemoteObjectList

public void readRemoteObjectList(ListIRemoteObject objects)

从 MessageParcel 中读取 IRemoteObject 对象的列表。

使用此方法时,您的应用程序需要传递要从 MessageParcel 中读取的 IRemoteObject 对象列表。

参数:

参数名称参数描述
objects指示您的应用程序要从 MessageParcel 中读取的 IRemoteObject 对象列表。 不管这个列表的长度是大于还是小于从MessageParcel中实际读取的IRemoteObject对象的个数,都会返回一个从MessageParcel中实际读取的IRemoteObject对象的列表。

writeException

public void writeException(Exception exception)

将异常写入 MessageParcel。

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

此方法通常在响应接收到的数据包时使用。

参数:

参数名称参数描述
exception指示写入 MessageParcel 的异常。

writeNoException

public void writeNoException()

不向 MessageParcel 写入异常。

readException

public void readException()

从 MessageParcel 中读取异常。

将抛出异常读取。

此方法通常在读取响应数据包时使用。

Throws:

Throw 名称Throw描述
Exception引发从 MessageParcel 读取的异常。 异常可以是 SecurityException、IllegalArgumentException、NullPointerException、IllegalStateException、UnsupportedOperationException、IndexOutOfBoundsException、NegativeArraySizeException、ArrayStoreException、ClassCastException 或 RemoteException。

getFdFromDatagramSocket

public static FileDescriptor getFdFromDatagramSocket(DatagramSocket datagramSocket)

从 DatagramSocket 读取 FileDescriptor

从指定的 DatagramSocket 创建一个新的文件描述符。 新的文件描述符保存了 DatagramSocket 中原始文件描述符的副本,因此您负责关闭返回的新文件描述符。

参数:

参数名称参数描述
datagramSocket指示要获取 FileDescriptor 的 DatagramSocket。

返回:

返回一个文件描述符。

getFd

public static int getFd(FileDescriptor fileDescriptor)

从 FileDescriptor 读取本机 fd

参数:

参数名称参数描述
fileDescriptor指示获取 fd 的 FileDescriptor。

返回:

如果它不为空,则返回给定 FileDescriptor 的 fd; 否则返回 -1。

detachFd

public static int detachFd(FileDescriptor fileDescriptor)

从 FileDescriptor 中分离本机 fd。

现在您有责任关闭本机 fd 或发生 fd 泄漏。

当描述符的原始创建者希望关闭 FileDescriptor 本身时,您不能调用该方法。

参数:

参数名称参数描述
fileDescriptorFileDescriptor 来分离 fd。

返回:

如果 fd 从给定的 FileDescriptor 中成功分离,则返回一个 fd; 否则返回 -1。

writeAshmem

public boolean writeAshmem(Ashmem ashmem)

将指定的 Ashmem 对象写入此 MessageParcel。

参数:

参数名称参数描述
ashmem指示要写入此 MessageParcel 的 Ashmem 对象。

返回:

如果 Ashmem 对象成功写入此 MessageParcel,则返回 true; 否则返回 false。

readAshmem

public Ashmem readAshmem()

从此 MessageParcel 中读取 Ashmem 对象。

返回:

返回 Ashmem 对象。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/202791.html<

(0)
管理的头像管理
上一篇2025-04-06 09:31
下一篇 2025-04-06 09:32

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注