• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.rpc (RPC通信)
2
3本模块提供进程间通信能力,包括设备内的进程间通信(IPC)和设备间的进程间通信(RPC),前者基于Binder驱动,后者基于软总线驱动。
4
5> **说明:**
6>
7> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8>
9> - 本模块从API version 9开始支持异常返回功能。
10
11## 导入模块
12
13```
14import rpc from '@ohos.rpc';
15```
16
17## ErrorCode<sup>9+</sup>
18
19从API version 9起,IPC支持异常返回功能。错误码对应数值及含义如下。
20
21**系统能力**:SystemCapability.Communication.IPC.Core
22
23  | 名称                                  | 值      | 说明                                          |
24  | ------------------------------------- | ------- | --------------------------------------------- |
25  | CHECK_PARAM_ERROR                     | 401     | 检查参数失败。                                |
26  | OS_MMAP_ERROR                         | 1900001 | 执行系统调用mmap失败。                        |
27  | OS_IOCTL_ERROR                        | 1900002 | 在共享内存文件描述符上执行系统调用ioctl失败。 |
28  | WRITE_TO_ASHMEM_ERROR                 | 1900003 | 向共享内存写数据失败。                        |
29  | READ_FROM_ASHMEM_ERROR                | 1900004 | 从共享内存读数据失败。                        |
30  | ONLY_PROXY_OBJECT_PERMITTED_ERROR     | 1900005 | 只有proxy对象允许该操作。                     |
31  | ONLY_REMOTE_OBJECT_PERMITTED_ERROR    | 1900006 | 只有remote对象允许该操作。                    |
32  | COMMUNICATION_ERROR                   | 1900007 | 和远端对象进行进程间通信失败。                |
33  | PROXY_OR_REMOTE_OBJECT_INVALID_ERROR  | 1900008 | 非法的代理对象或者远端对象。                  |
34  | WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR  | 1900009 | 向MessageSequence写数据失败。                 |
35  | READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR | 1900010 | 读取MessageSequence数据失败。                 |
36  | PARCEL_MEMORY_ALLOC_ERROR             | 1900011 | 序列化过程中内存分配失败。                    |
37  | CALL_JS_METHOD_ERROR                  | 1900012 | 执行JS回调方法失败。                          |
38  | OS_DUP_ERROR                          | 1900013 | 执行系统调用dup失败。                         |
39
40
41## MessageSequence<sup>9+</sup>
42
43  在RPC或IPC过程中,发送方可以使用MessageSequence提供的写方法,将待发送的数据以特定格式写入该对象。接收方可以使用MessageSequence提供的读方法从该对象中读取特定格式的数据。数据格式包括:基础类型及数组、IPC对象、接口描述符和自定义序列化对象。
44
45### create
46
47  static create(): MessageSequence
48
49  静态方法,创建MessageSequence对象。
50
51**系统能力**:SystemCapability.Communication.IPC.Core
52
53**返回值:**
54
55  | 类型            | 说明                            |
56  | --------------- | ------------------------------- |
57  | MessageSequence | 返回创建的MessageSequence对象。 |
58
59**示例:**
60
61  ```ts
62  let data = rpc.MessageSequence.create();
63  console.log("RpcClient: data is " + data);
64  ```
65
66### reclaim
67
68reclaim(): void
69
70释放不再使用的MessageSequence对象。
71
72**系统能力**:SystemCapability.Communication.IPC.Core
73
74**示例:**
75
76  ```ts
77  let reply = rpc.MessageSequence.create();
78  reply.reclaim();
79  ```
80
81### writeRemoteObject
82
83writeRemoteObject(object: [IRemoteObject](#iremoteobject)): void
84
85序列化远程对象并将其写入MessageSequence对象。
86
87**系统能力**:SystemCapability.Communication.IPC.Core
88
89**参数:**
90
91  | 参数名 | 类型                            | 必填 | 说明                                      |
92  | ------ | ------------------------------- | ---- | ----------------------------------------- |
93  | object | [IRemoteObject](#iremoteobject) | 是   | 要序列化并写入MessageSequence的远程对象。 |
94
95**错误码:**
96
97以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
98
99  | 错误码ID | 错误信息 |
100  | -------- | -------- |
101  | 1900008  | proxy or remote object is invalid |
102  | 1900009  | write data to message sequence failed |
103
104**示例:**
105
106  ```ts
107  class TestRemoteObject extends rpc.RemoteObject {
108      constructor(descriptor) {
109          super(descriptor);
110      }
111  }
112  let data = rpc.MessageSequence.create();
113  let testRemoteObject = new TestRemoteObject("testObject");
114  try {
115      data.writeRemoteObject(testRemoteObject);
116  } catch(error) {
117      console.info("Rpc write remote object fail, errorCode " + error.code);
118      console.info("Rpc write remote object fail, errorMessage " + error.message);
119  }
120  ```
121
122### readRemoteObject
123
124readRemoteObject(): IRemoteObject
125
126从MessageSequence读取远程对象。此方法用于反序列化MessageSequence对象以生成IRemoteObject。远程对象按写入MessageSequence的顺序读取。
127
128**系统能力**:SystemCapability.Communication.IPC.Core
129
130**返回值:**
131
132  | 类型                            | 说明               |
133  | ------------------------------- | ------------------ |
134  | [IRemoteObject](#iremoteobject) | 读取到的远程对象。 |
135
136**错误码:**
137
138以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
139
140  | 错误码ID | 错误信息 |
141  | -------- | -------- |
142  | 1900008  | proxy or remote object is invalid |
143  | 1900010  | read data from message sequence failed |
144
145**示例:**
146
147  ```ts
148  class TestRemoteObject extends rpc.RemoteObject {
149      constructor(descriptor) {
150          super(descriptor);
151      }
152  }
153  let data = rpc.MessageSequence.create();
154  let testRemoteObject = new TestRemoteObject("testObject");
155  try {
156      data.writeRemoteObject(testRemoteObject);
157      let proxy = data.readRemoteObject();
158  } catch(error) {
159      console.info("Rpc write remote object fail, errorCode " + error.code);
160      console.info("Rpc write remote object fail, errorMessage " + error.message);
161  }
162  ```
163
164### writeInterfaceToken
165
166writeInterfaceToken(token: string): void
167
168将接口描述符写入MessageSequence对象,远端对象可使用该信息校验本次通信。
169
170**系统能力**:SystemCapability.Communication.IPC.Core
171
172**参数:**
173
174  | 参数名 | 类型   | 必填 | 说明               |
175  | ------ | ------ | ---- | ------------------ |
176  | token  | string | 是   | 字符串类型描述符。 |
177
178**错误码:**
179
180以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
181
182  | 错误码ID | 错误信息 |
183  | -------- | -------- |
184  | 1900009  | write data to message sequence failed |
185
186**示例:**
187
188  ```ts
189  let data = rpc.MessageSequence.create();
190  try {
191      data.writeInterfaceToken("aaa");
192  } catch(error) {
193      console.info("rpc write interface fail, errorCode " + error.code);
194      console.info("rpc write interface fail, errorMessage " + error.message);
195  }
196  ```
197
198### readInterfaceToken
199
200readInterfaceToken(): string
201
202从MessageSequence对象中读取接口描述符,接口描述符按写入MessageSequence的顺序读取,本地对象可使用该信息检验本次通信。
203
204**系统能力**:SystemCapability.Communication.IPC.Core
205
206**返回值:**
207
208  | 类型   | 说明                     |
209  | ------ | ------------------------ |
210  | string | 返回读取到的接口描述符。 |
211
212**错误码:**
213
214以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
215
216  | 错误码ID | 错误信息 |
217  | -------- | -------- |
218  | 1900010  | read data from message sequence failed |
219
220**示例:**
221
222```ts
223class Stub extends rpc.RemoteObject {
224    onRemoteRequest(code, data, reply, option) {
225        try {
226            let interfaceToken = data.readInterfaceToken();
227            console.log("RpcServer: interfaceToken is " + interfaceToken);
228        } catch(error) {
229            console.info("RpcServer: read interfaceToken failed, errorCode " + error.code);
230            console.info("RpcServer: read interfaceToken failed, errorMessage " + error.message);
231        }
232        return true;
233    }
234}
235```
236
237### getSize
238
239getSize(): number
240
241获取当前创建的MessageSequence对象的数据大小。
242
243**系统能力**:SystemCapability.Communication.IPC.Core
244
245**返回值:**
246
247  | 类型   | 说明                                            |
248  | ------ | ----------------------------------------------- |
249  | number | 获取的MessageSequence实例的数据大小。以字节为单位。 |
250
251**示例:**
252
253  ```ts
254  let data = rpc.MessageSequence.create();
255  let size = data.getSize();
256  console.log("RpcClient: size is " + size);
257  ```
258
259### getCapacity
260
261getCapacity(): number
262
263获取当前MessageSequence对象的容量大小。
264
265**系统能力**:SystemCapability.Communication.IPC.Core
266
267**返回值:**
268
269  | 类型   | 说明  |
270  | ------ | ----- |
271  | number | 获取的MessageSequence实例的容量大小。以字节为单位。 |
272
273**示例:**
274
275  ```ts
276  let data = rpc.MessageSequence.create();
277  let result = data.getCapacity();
278  console.log("RpcClient: capacity is " + result);
279  ```
280
281### setSize
282
283setSize(size: number): void
284
285设置MessageSequence对象中包含的数据大小。
286
287**系统能力**:SystemCapability.Communication.IPC.Core
288
289**参数:**
290
291  | 参数名 | 类型   | 必填 | 说明   |
292  | ------ | ------ | ---- | ------ |
293  | size   | number | 是   | MessageSequence实例的数据大小。以字节为单位。 |
294
295**示例:**
296
297  ```ts
298  let data = rpc.MessageSequence.create();
299  try {
300      data.setSize(16);
301      console.log("RpcClient: setSize is " + data.getSize());
302  } catch(error) {
303      console.info("rpc set size of MessageSequence fail, errorCode " + error.code);
304      console.info("rpc set size of MessageSequence fail, errorMessage " + error.message);
305  }
306  ```
307
308### setCapacity
309
310setCapacity(size: number): void
311
312设置MessageSequence对象的存储容量。
313
314**系统能力**:SystemCapability.Communication.IPC.Core
315
316**参数:**
317
318  | 参数名 | 类型   | 必填 | 说明                                          |
319  | ------ | ------ | ---- | --------------------------------------------- |
320  | size   | number | 是   | MessageSequence实例的存储容量。以字节为单位。 |
321
322**错误码:**
323
324以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
325
326  | 错误码ID | 错误信息 |
327  | -------- | -------- |
328  | 1900011  | parcel memory alloc failed |
329
330**示例:**
331
332  ```ts
333  let data = rpc.MessageSequence.create();
334  try {
335      data.setCapacity(100);
336      console.log("RpcClient: setCapacity is " + data.getCapacity());
337  } catch(error) {
338      console.info("rpc memory alloc fail, errorCode " + error.code);
339      console.info("rpc memory alloc fail, errorMessage " + error.message);
340  }
341  ```
342
343### getWritableBytes
344
345getWritableBytes(): number
346
347获取MessageSequence的可写字节空间大小。
348
349**系统能力**:SystemCapability.Communication.IPC.Core
350
351**返回值:**
352
353  | 类型   | 说明   |
354  | ------ | ------ |
355  | number | 获取到的MessageSequence实例的可写字节空间。以字节为单位。 |
356
357**示例:**
358
359```ts
360class Stub extends rpc.RemoteObject {
361    onRemoteRequest(code, data, reply, option) {
362        let getWritableBytes = data.getWritableBytes();
363        console.log("RpcServer: getWritableBytes is " + getWritableBytes);
364        return true;
365    }
366}
367```
368
369### getReadableBytes
370
371getReadableBytes(): number
372
373获取MessageSequence的可读字节空间。
374
375**系统能力**:SystemCapability.Communication.IPC.Core
376
377**返回值:**
378
379  | 类型   | 说明    |
380  | ------ | ------- |
381  | number | 获取到的MessageSequence实例的可读字节空间。以字节为单位。 |
382
383**示例:**
384
385  ```ts
386class Stub extends rpc.RemoteObject {
387    onRemoteRequest(code, data, reply, option) {
388        let result = data.getReadableBytes();
389        console.log("RpcServer: getReadableBytes is " + result);
390        return true;
391    }
392}
393  ```
394
395### getReadPosition
396
397getReadPosition(): number
398
399获取MessageSequence的读位置。
400
401**系统能力**:SystemCapability.Communication.IPC.Core
402
403**返回值:**
404
405  | 类型   | 说明   |
406  | ------ | ------ |
407  | number | 返回MessageSequence实例中的当前读取位置。 |
408
409**示例:**
410
411  ```ts
412  let data = rpc.MessageSequence.create();
413  let readPos = data.getReadPosition();
414  console.log("RpcClient: readPos is " + readPos);
415  ```
416
417### getWritePosition
418
419getWritePosition(): number
420
421获取MessageSequence的写位置。
422
423**系统能力**:SystemCapability.Communication.IPC.Core
424
425**返回值:**
426
427  | 类型   | 说明  |
428  | ------ | ----- |
429  | number | 返回MessageSequence实例中的当前写入位置。 |
430
431**示例:**
432
433  ```ts
434  let data = rpc.MessageSequence.create();
435  data.writeInt(10);
436  let bwPos = data.getWritePosition();
437  console.log("RpcClient: bwPos is " + bwPos);
438  ```
439
440### rewindRead
441
442rewindRead(pos: number): void
443
444重新偏移读取位置到指定的位置。
445
446**系统能力**:SystemCapability.Communication.IPC.Core
447
448**参数:**
449
450  | 参数名 | 类型   | 必填 | 说明    |
451  | ------ | ------ | ---- | ------- |
452  | pos    | number | 是   | 开始读取数据的目标位置。 |
453
454**示例:**
455
456  ```ts
457  let data = rpc.MessageSequence.create();
458  data.writeInt(12);
459  data.writeString("sequence");
460  let number = data.readInt();
461  console.log("RpcClient: number is " + number);
462  try {
463      data.rewindRead(0);
464  } catch(error) {
465      console.info("rpc rewind read data fail, errorCode " + error.code);
466      console.info("rpc rewind read data fail, errorMessage " + error.message);
467  }
468  let number2 = data.readInt();
469  console.log("RpcClient: rewindRead is " + number2);
470  ```
471
472### rewindWrite
473
474rewindWrite(pos: number): void
475
476重新偏移写位置到指定的位置。
477
478**系统能力**:SystemCapability.Communication.IPC.Core
479
480**参数:**
481
482  | 参数名 | 类型   | 必填 | 说明  |
483  | ------ | ------ | ---- | ----- |
484  | pos    | number | 是   | 开始写入数据的目标位置。 |
485
486**示例:**
487
488  ```ts
489  let data = rpc.MessageSequence.create();
490  data.writeInt(4);
491  try {
492      data.rewindWrite(0);
493  } catch(error) {
494      console.info("rpc rewind read data fail, errorCode " + error.code);
495      console.info("rpc rewind read data fail, errorMessage " + error.message);
496  }
497  data.writeInt(5);
498  let number = data.readInt();
499  console.log("RpcClient: rewindWrite is: " + number);
500  ```
501
502### writeByte
503
504writeByte(val: number): void
505
506将字节值写入MessageSequence实例。
507
508**系统能力**:SystemCapability.Communication.IPC.Core
509
510**参数:**
511
512  | 参数名 | 类型   | 必填 | 说明  |
513  | ------ | ------ | ---- | ----- |
514  | val    | number | 是   | 要写入的字节值。 |
515
516**错误码:**
517
518以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
519
520  | 错误码ID | 错误信息 |
521  | -------- | ------- |
522  | 1900009 | write data to message sequence failed |
523
524**示例:**
525
526  ```ts
527  let data = rpc.MessageSequence.create();
528  try {
529      data.writeByte(2);
530  } catch(error) {
531    console.info("rpc write byte fail, errorCode " + error.code);
532    console.info("rpc write byte fail, errorMessage" + error.message);
533  }
534  ```
535
536### readByte
537
538readByte(): number
539
540从MessageSequence实例读取字节值。
541
542**系统能力**:SystemCapability.Communication.IPC.Core
543
544**返回值:**
545
546  | 类型   | 说明  |
547  | ------ | ----- |
548  | number | 返回字节值。 |
549
550**错误码:**
551
552以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
553
554  | 错误码ID | 错误信息 |
555  | ------- | --------  |
556  | 1900010 | read data from message sequence failed |
557
558**示例:**
559
560  ```ts
561  let data = rpc.MessageSequence.create();
562  try {
563      data.writeByte(2);
564  } catch(error) {
565    console.info("rpc write byte fail, errorCode " + error.code);
566    console.info("rpc write byte fail, errorMessage" + error.message);
567  }
568  try {
569      let ret = data.readByte();
570      console.log("RpcClient: readByte is: " + ret);
571  } catch(error) {
572    console.info("rpc write byte fail, errorCode " + error.code);
573    console.info("rpc write byte fail, errorMessage" + error.message);
574  }
575  ```
576
577### writeShort
578
579writeShort(val: number): void
580
581将短整数值写入MessageSequence实例。
582
583**系统能力**:SystemCapability.Communication.IPC.Core
584
585**参数:**
586
587  | 参数名 | 类型   | 必填 | 说明 |
588  | ------ | ------ | ---  | ---  |
589  | val    | number | 是   | 要写入的短整数值。 |
590
591**错误码:**
592
593以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
594
595  | 错误码ID | 错误信息 |
596  | -------- | -------- |
597  | 1900009  | write data to message sequence failed |
598
599**示例:**
600
601  ```ts
602  let data = rpc.MessageSequence.create();
603  try {
604      data.writeShort(8);
605  } catch(error) {
606      console.info("rpc write short fail, errorCode " + error.code);
607      console.info("rpc write short fail, errorMessage" + error.message);
608  }
609  ```
610
611### readShort
612
613readShort(): number
614
615从MessageSequence实例读取短整数值。
616
617**系统能力**:SystemCapability.Communication.IPC.Core
618
619**返回值:**
620
621  | 类型   | 说明           |
622  | ------ | -------------- |
623  | number | 返回短整数值。 |
624
625**错误码:**
626
627以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
628
629  | 错误码ID | 错误信息 |
630  | -------- | -------- |
631  | 1900010  | read data from message sequence failed |
632
633**示例:**
634
635  ```ts
636  let data = rpc.MessageSequence.create();
637  try {
638      data.writeShort(8);
639  } catch(error) {
640      console.info("rpc write short fail, errorCode " + error.code);
641      console.info("rpc write short fail, errorMessage" + error.message);
642  }
643  try {
644      let ret = data.readShort();
645      console.log("RpcClient: readByte is: " + ret);
646  } catch(error) {
647      console.info("rpc read short fail, errorCode " + error.code);
648      console.info("rpc read short fail, errorMessage" + error.message);
649  }
650  ```
651
652### writeInt
653
654writeInt(val: number): void
655
656将整数值写入MessageSequence实例。
657
658**系统能力**:SystemCapability.Communication.IPC.Core
659
660**参数:**
661
662  | 参数名 | 类型   | 必填 | 说明             |
663  | ------ | ------ | ---- | ---------------- |
664  | val    | number | 是   | 要写入的整数值。 |
665
666**错误码:**
667
668以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
669
670  | 错误码ID | 错误信息 |
671  | -------- | -------- |
672  | 1900009  | write data to message sequence failed |
673
674**示例:**
675
676  ```ts
677  let data = rpc.MessageSequence.create();
678  try {
679      data.writeInt(10);
680  } catch(error) {
681      console.info("rpc write int fail, errorCode " + error.code);
682      console.info("rpc write int fail, errorMessage" + error.message);
683  }
684  ```
685
686### readInt
687
688readInt(): number
689
690从MessageSequence实例读取整数值。
691
692**系统能力**:SystemCapability.Communication.IPC.Core
693
694**返回值:**
695
696  | 类型   | 说明         |
697  | ------ | ------------ |
698  | number | 返回整数值。 |
699
700**错误码:**
701
702以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
703
704  | 错误码ID | 错误信息 |
705  | -------- | -------- |
706  | 1900010  | read data from message sequence failed |
707
708**示例:**
709
710  ```ts
711  let data = rpc.MessageSequence.create();
712  try {
713      data.writeInt(10);
714  } catch(error) {
715      console.info("rpc write int fail, errorCode " + error.code);
716      console.info("rpc write int fail, errorMessage" + error.message);
717  }
718  try {
719      let ret = data.readInt();
720      console.log("RpcClient: readInt is " + ret);
721  } catch(error) {
722      console.info("rpc read int fail, errorCode " + error.code);
723      console.info("rpc read int fail, errorMessage" + error.message);
724  }
725  ```
726
727### writeLong
728
729writeLong(val: number): void
730
731将长整数值写入MessageSequence实例。
732
733**系统能力**:SystemCapability.Communication.IPC.Core
734
735**参数:**
736
737  | 参数名 | 类型   | 必填 | 说明             |
738  | ------ | ------ | ---- | ---------------- |
739  | val    | number | 是   | 要写入的长整数值 |
740
741**错误码:**
742
743以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
744
745  | 错误码ID | 错误信息 |
746  | -------- | -------- |
747  | 1900009  | write data to message sequence failed |
748
749**示例:**
750
751  ```ts
752  let data = rpc.MessageSequence.create();
753  try {
754      data.writeLong(10000);
755  } catch(error) {
756      console.info("rpc write long fail, errorCode " + error.code);
757      console.info("rpc write long fail, errorMessage" + error.message);
758  }
759  ```
760
761### readLong
762
763readLong(): number
764
765从MessageSequence实例中读取长整数值。
766
767**系统能力**:SystemCapability.Communication.IPC.Core
768
769**返回值:**
770
771  | 类型   | 说明           |
772  | ------ | -------------- |
773  | number | 返回长整数值。 |
774
775**错误码:**
776
777以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
778
779  | 错误码ID | 错误信息 |
780  | -------- | -------- |
781  | 1900010  | read data from message sequence failed |
782
783**示例:**
784
785  ```ts
786  let data = rpc.MessageSequence.create();
787  try {
788      data.writeLong(10000);
789  } catch(error) {
790      console.info("rpc write long fail, errorCode " + error.code);
791      console.info("rpc write long fail, errorMessage" + error.message);
792  }
793  try {
794      let ret = data.readLong();
795      console.log("RpcClient: readLong is " + ret);
796  } catch(error) {
797      console.info("rpc read long fail, errorCode " + error.code);
798      console.info("rpc read long fail, errorMessage" + error.message);
799  }
800  ```
801
802### writeFloat
803
804writeFloat(val: number): void
805
806将浮点值写入MessageSequence实例。
807
808**系统能力**:SystemCapability.Communication.IPC.Core
809
810**参数:**
811
812  | 参数名 | 类型   | 必填 | 说明  |
813  | ------ | ------ | ---- | ----- |
814  | val    | number | 是   | 要写入的浮点值。 |
815
816**错误码:**
817
818以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
819
820  | 错误码ID | 错误信息 |
821  | -------- | -------- |
822  | 1900009  | write data to message sequence failed |
823
824**示例:**
825
826  ```ts
827  let data = rpc.MessageSequence.create();
828  try {
829      data.writeFloat(1.2);
830  } catch(error) {
831      console.info("rpc write float fail, errorCode " + error.code);
832      console.info("rpc write float fail, errorMessage" + error.message);
833  }
834  ```
835
836### readFloat
837
838readFloat(): number
839
840从MessageSequence实例中读取浮点值。
841
842**系统能力**:SystemCapability.Communication.IPC.Core
843
844**返回值:**
845
846  | 类型   | 说明         |
847  | ------ | ------------ |
848  | number | 返回浮点值。 |
849
850**错误码:**
851
852以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
853
854  | 错误码ID | 错误信息 |
855  | -------- | -------- |
856  | 1900010  | read data from message sequence failed |
857
858**示例:**
859
860  ```ts
861  let data = rpc.MessageSequence.create();
862  try {
863      data.writeFloat(1.2);
864  } catch(error) {
865      console.info("rpc write float fail, errorCode " + error.code);
866      console.info("rpc write float fail, errorMessage" + error.message);
867  }
868  try {
869      let ret = data.readFloat();
870      console.log("RpcClient: readFloat is " + ret);
871  } catch(error) {
872      console.info("rpc read float fail, errorCode " + error.code);
873      console.info("rpc read float fail, errorMessage" + error.message);
874  }
875  ```
876
877### writeDouble
878
879writeDouble(val: number): void
880
881将双精度浮点值写入MessageSequence实例。
882
883**系统能力**:SystemCapability.Communication.IPC.Core
884
885**参数:**
886
887  | 参数名 | 类型   | 必填 | 说明                   |
888  | ------ | ------ | ---- | ---------------------- |
889  | val    | number | 是   | 要写入的双精度浮点值。 |
890
891**错误码:**
892
893以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
894
895  | 错误码ID | 错误信息 |
896  | -------- | -------- |
897  | 1900009  | write data to message sequence failed |
898
899**示例:**
900
901  ```ts
902  let data = rpc.MessageSequence.create();
903  try {
904      data.writeDouble(10.2);
905  } catch(error) {
906      console.info("rpc read float fail, errorCode " + error.code);
907      console.info("rpc read float fail, errorMessage" + error.message);
908  }
909  ```
910
911### readDouble
912
913readDouble(): number
914
915从MessageSequence实例读取双精度浮点值。
916
917**系统能力**:SystemCapability.Communication.IPC.Core
918
919**返回值:**
920
921  | 类型   | 说明               |
922  | ------ | ------------------ |
923  | number | 返回双精度浮点值。 |
924
925**错误码:**
926
927以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
928
929  | 错误码ID | 错误信息 |
930  | -------- | -------- |
931  | 1900010  | read data from message sequence failed |
932
933**示例:**
934
935  ```ts
936  let data = rpc.MessageSequence.create();
937  try {
938      data.writeDouble(10.2);
939  } catch(error) {
940      console.info("rpc write double fail, errorCode " + error.code);
941      console.info("rpc write double fail, errorMessage" + error.message);
942  }
943  try {
944      let ret = data.readDouble();
945      console.log("RpcClient: readDouble is " + ret);
946  } catch(error) {
947      console.info("rpc read double fail, errorCode " + error.code);
948      console.info("rpc read double fail, errorMessage" + error.message);
949  }
950  ```
951
952### writeBoolean
953
954writeBoolean(val: boolean): void
955
956将布尔值写入MessageSequence实例。
957
958**系统能力**:SystemCapability.Communication.IPC.Core
959
960**参数:**
961
962  | 参数名 | 类型    | 必填 | 说明             |
963  | ------ | ------- | ---- | ---------------- |
964  | val    | boolean | 是   | 要写入的布尔值。 |
965
966**错误码:**
967
968以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
969
970  | 错误码ID | 错误信息 |
971  | -------- | -------- |
972  | 1900009  | write data to message sequence failed |
973
974**示例:**
975
976  ```ts
977  let data = rpc.MessageSequence.create();
978  try {
979      data.writeBoolean(false);
980  } catch(error) {
981      console.info("rpc write boolean fail, errorCode " + error.code);
982      console.info("rpc write boolean fail, errorMessage" + error.message);
983  }
984  ```
985
986### readBoolean
987
988readBoolean(): boolean
989
990从MessageSequence实例读取布尔值。
991
992**系统能力**:SystemCapability.Communication.IPC.Core
993
994**返回值:**
995
996  | 类型    | 说明                 |
997  | ------- | -------------------- |
998  | boolean | 返回读取到的布尔值。 |
999
1000**错误码:**
1001
1002以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1003
1004  | 错误码ID | 错误信息 |
1005  | -------- | -------- |
1006  | 1900010  | read data from message sequence failed |
1007
1008**示例:**
1009
1010  ```ts
1011  let data = rpc.MessageSequence.create();
1012  try {
1013      data.writeBoolean(false);
1014  } catch(error) {
1015      console.info("rpc write boolean fail, errorCode " + error.code);
1016      console.info("rpc write boolean fail, errorMessage" + error.message);
1017  }
1018  try {
1019      let ret = data.readBoolean();
1020      console.log("RpcClient: readBoolean is " + ret);
1021  } catch(error) {
1022      console.info("rpc read boolean fail, errorCode " + error.code);
1023      console.info("rpc read boolean fail, errorMessage" + error.message);
1024  }
1025  ```
1026
1027### writeChar
1028
1029writeChar(val: number): void
1030
1031将单个字符值写入MessageSequence实例。
1032
1033**系统能力**:SystemCapability.Communication.IPC.Core
1034
1035**参数:**
1036
1037  | 参数名 | 类型   | 必填 | 说明                 |
1038  | ------ | ------ | ---- | -------------------- |
1039  | val    | number | 是   | 要写入的单个字符值。 |
1040
1041**错误码:**
1042
1043以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1044
1045  | 错误码ID | 错误信息 |
1046  | -------- | -------- |
1047  | 1900009  | write data to message sequence failed |
1048
1049**示例:**
1050
1051  ```ts
1052  let data = rpc.MessageSequence.create();
1053  try {
1054      data.writeChar(97);
1055  } catch(error) {
1056      console.info("rpc write char fail, errorCode " + error.code);
1057      console.info("rpc write char fail, errorMessage" + error.message);
1058  }
1059  ```
1060
1061### readChar
1062
1063readChar(): number
1064
1065从MessageSequence实例中读取单个字符值。
1066
1067**系统能力**:SystemCapability.Communication.IPC.Core
1068
1069**返回值:**
1070
1071  | 类型   | 说明 |
1072  | ------ | ---- |
1073  | number | 返回单个字符值。 |
1074
1075**错误码:**
1076
1077以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1078
1079  | 错误码ID | 错误信息 |
1080  | -------- | -------- |
1081  | 1900010  | read data from message sequence failed |
1082
1083**示例:**
1084
1085  ```ts
1086  let data = rpc.MessageSequence.create();
1087  try {
1088      data.writeChar(97);
1089  } catch(error) {
1090      console.info("rpc write char fail, errorCode " + error.code);
1091      console.info("rpc write char fail, errorMessage" + error.message);
1092  }
1093  try {
1094      let ret = data.readChar();
1095      console.log("RpcClient: readChar is " + ret);
1096  } catch(error) {
1097      console.info("rpc read char fail, errorCode " + error.code);
1098      console.info("rpc read char fail, errorMessage" + error.message);
1099  }
1100  ```
1101
1102### writeString
1103
1104writeString(val: string): void
1105
1106将字符串值写入MessageSequence实例。
1107
1108**系统能力**:SystemCapability.Communication.IPC.Core
1109
1110**参数:**
1111
1112  | 参数名 | 类型   | 必填 | 说明                                      |
1113  | ------ | ------ | ---- | ----------------------------------------- |
1114  | val    | string | 是   | 要写入的字符串值,其长度应小于40960字节。 |
1115
1116**错误码:**
1117
1118以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1119
1120  | 错误码ID | 错误信息 |
1121  | -------- | -------- |
1122  | 1900009  | write data to message sequence failed |
1123
1124**示例:**
1125
1126  ```ts
1127  let data = rpc.MessageSequence.create();
1128  try {
1129      data.writeString('abc');
1130  } catch(error) {
1131      console.info("rpc write string fail, errorCode " + error.code);
1132      console.info("rpc write string fail, errorMessage" + error.message);
1133  }
1134  ```
1135
1136### readString
1137
1138readString(): string
1139
1140从MessageSequence实例读取字符串值。
1141
1142**系统能力**:SystemCapability.Communication.IPC.Core
1143
1144**返回值:**
1145
1146  | 类型   | 说明           |
1147  | ------ | -------------- |
1148  | string | 返回字符串值。 |
1149
1150**错误码:**
1151
1152以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1153
1154  | 错误码ID | 错误信息 |
1155  | -------- | -------- |
1156  | 1900010  | read data from message sequence failed |
1157
1158**示例:**
1159
1160  ```ts
1161  let data = rpc.MessageSequence.create();
1162  try {
1163      data.writeString('abc');
1164  } catch(error) {
1165      console.info("rpc write string fail, errorCode " + error.code);
1166      console.info("rpc write string fail, errorMessage" + error.message);
1167  }
1168  try {
1169      let ret = data.readString();
1170      console.log("RpcClient: readString is " + ret);
1171  } catch(error) {
1172      console.info("rpc read string fail, errorCode " + error.code);
1173      console.info("rpc read string fail, errorMessage" + error.message);
1174  }
1175  ```
1176
1177### writeParcelable
1178
1179writeParcelable(val: Parcelable): void
1180
1181将自定义序列化对象写入MessageSequence实例。
1182
1183**系统能力**:SystemCapability.Communication.IPC.Core
1184
1185**参数:**
1186
1187  | 参数名 | 类型 | 必填 | 说明 |
1188  | ------ | --------- | ---- | ------ |
1189  | val    | Parcelable | 是   | 要写入的可序列对象。 |
1190
1191**错误码:**
1192
1193以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1194
1195  | 错误码ID | 错误信息 |
1196  | -------- | -------- |
1197  | 1900009  | write data to message sequence failed |
1198
1199**示例:**
1200
1201  ```ts
1202  class MySequenceable {
1203      num: number;
1204      str: string;
1205      constructor(num, str) {
1206          this.num = num;
1207          this.str = str;
1208      }
1209      marshalling(messageSequence) {
1210          messageSequence.writeInt(this.num);
1211          messageSequence.writeString(this.str);
1212          return true;
1213      }
1214      unmarshalling(messageSequence) {
1215          this.num = messageSequence.readInt();
1216          this.str = messageSequence.readString();
1217          return true;
1218      }
1219  }
1220  let parcelable = new MySequenceable(1, "aaa");
1221  let data = rpc.MessageSequence.create();
1222  try {
1223      data.writeParcelable(parcelable);
1224  } catch(error) {
1225      console.info("rpc write parcelable fail, errorCode " + error.code);
1226      console.info("rpc write parcelable fail, errorMessage" + error.message);
1227  }
1228  ```
1229
1230### readParcelable
1231
1232readParcelable(dataIn: Parcelable): void
1233
1234从MessageSequence实例中读取成员变量到指定的对象(dataIn)。
1235
1236**系统能力**:SystemCapability.Communication.IPC.Core
1237
1238**参数:**
1239
1240  | 参数名 | 类型                      | 必填 | 说明                                      |
1241  | ------ | ------------------------- | ---- | ----------------------------------------- |
1242  | dataIn | Parcelable                | 是   | 需要从MessageSequence读取成员变量的对象。 |
1243
1244**错误码:**
1245
1246以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1247
1248  | 错误码ID | 错误信息 |
1249  | -------- | -------- |
1250  | 1900010  | read data from message sequence failed |
1251  | 1900012  | call js callback function failed |
1252
1253**示例:**
1254
1255  ```ts
1256  class MySequenceable {
1257      num: number;
1258      str: string;
1259      constructor(num, str) {
1260          this.num = num;
1261          this.str = str;
1262      }
1263      marshalling(messageSequence) {
1264          messageSequence.writeInt(this.num);
1265          messageSequence.writeString(this.str);
1266          return true;
1267      }
1268      unmarshalling(messageSequence) {
1269          this.num = messageSequence.readInt();
1270          this.str = messageSequence.readString();
1271          return true;
1272      }
1273  }
1274  let parcelable = new MySequenceable(1, "aaa");
1275  let data = rpc.MessageSequence.create();
1276  data.writeParcelable(parcelable);
1277  let ret = new MySequenceable(0, "");
1278  try {
1279      data.readParcelable(ret);
1280  }catch(error) {
1281      console.info("rpc read parcelable fail, errorCode " + error.code);
1282      console.info("rpc read parcelable fail, errorMessage" + error.message);
1283  }
1284  ```
1285
1286### writeByteArray
1287
1288writeByteArray(byteArray: number[]): void
1289
1290将字节数组写入MessageSequence实例。
1291
1292**系统能力**:SystemCapability.Communication.IPC.Core
1293
1294**参数:**
1295
1296  | 参数名    | 类型     | 必填 | 说明               |
1297  | --------- | -------- | ---- | ------------------ |
1298  | byteArray | number[] | 是   | 要写入的字节数组。 |
1299
1300**错误码:**
1301
1302以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1303
1304  | 错误码ID | 错误信息 |
1305  | -------- | -------- |
1306  | 1900009  | write data to message sequence failed |
1307
1308**示例:**
1309
1310  ```ts
1311  let data = rpc.MessageSequence.create();
1312  let ByteArrayVar = [1, 2, 3, 4, 5];
1313  try {
1314      data.writeByteArray(ByteArrayVar);
1315  } catch(error) {
1316      console.info("rpc write byteArray fail, errorCode " + error.code);
1317      console.info("rpc write byteArray fail, errorMessage" + error.message);
1318  }
1319  ```
1320
1321### readByteArray
1322
1323readByteArray(dataIn: number[]): void
1324
1325从MessageSequence实例读取字节数组。
1326
1327**系统能力**:SystemCapability.Communication.IPC.Core
1328
1329**参数:**
1330
1331  | 参数名 | 类型     | 必填 | 说明               |
1332  | ------ | -------- | ---- | ------------------ |
1333  | dataIn | number[] | 是   | 要读取的字节数组。 |
1334
1335**错误码:**
1336
1337以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1338
1339  | 错误码ID | 错误信息 |
1340  | -------- | -------- |
1341  | 1900010  | read data from message sequence failed |
1342
1343**示例:**
1344
1345  ```ts
1346  let data = rpc.MessageSequence.create();
1347  let ByteArrayVar = [1, 2, 3, 4, 5];
1348  try {
1349      data.writeByteArray(ByteArrayVar);
1350  } catch(error) {
1351      console.info("rpc write byteArray fail, errorCode " + error.code);
1352      console.info("rpc write byteArray fail, errorMessage" + error.message);
1353  }
1354  try {
1355      let array = new Array(5);
1356      data.readByteArray(array);
1357  } catch(error) {
1358      console.info("rpc write byteArray fail, errorCode " + error.code);
1359      console.info("rpc write byteArray fail, errorMessage" + error.message);
1360  }
1361  ```
1362
1363### readByteArray
1364
1365readByteArray(): number[]
1366
1367从MessageSequence实例中读取字节数组。
1368
1369**系统能力**:SystemCapability.Communication.IPC.Core
1370
1371**返回值:**
1372
1373  | 类型     | 说明           |
1374  | -------- | -------------- |
1375  | number[] | 返回字节数组。 |
1376
1377**错误码:**
1378
1379以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1380
1381  | 错误码ID | 错误信息 |
1382  | -------- | -------- |
1383  | 1900010  | read data from message sequence failed |
1384
1385**示例:**
1386
1387  ```ts
1388  let data = rpc.MessageSequence.create();
1389  let byteArrayVar = [1, 2, 3, 4, 5];
1390  try {
1391      data.writeByteArray(byteArrayVar);
1392  } catch(error) {
1393      console.info("rpc write byteArray fail, errorCode " + error.code);
1394      console.info("rpc write byteArray fail, errorMessage" + error.message);
1395  }
1396  try {
1397      let array = data.readByteArray();
1398      console.log("RpcClient: readByteArray is " + array);
1399  } catch(error) {
1400      console.info("rpc read byteArray fail, errorCode " + error.code);
1401      console.info("rpc read byteArray fail, errorMessage" + error.message);
1402  }
1403  ```
1404
1405### writeShortArray
1406
1407writeShortArray(shortArray: number[]): void
1408
1409将短整数数组写入MessageSequence实例。
1410
1411**系统能力**:SystemCapability.Communication.IPC.Core
1412
1413**参数:**
1414
1415  | 参数名     | 类型     | 必填 | 说明                 |
1416  | ---------- | -------- | ---- | -------------------- |
1417  | shortArray | number[] | 是   | 要写入的短整数数组。 |
1418
1419**错误码:**
1420
1421以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1422
1423  | 错误码ID | 错误信息 |
1424  | -------- | -------- |
1425  | 1900009  | write data to message sequence failed |
1426
1427**示例:**
1428
1429  ```ts
1430  let data = rpc.MessageSequence.create();
1431  try {
1432      data.writeShortArray([11, 12, 13]);
1433  } catch(error) {
1434      console.info("rpc read byteArray fail, errorCode " + error.code);
1435      console.info("rpc read byteArray fail, errorMessage" + error.message);
1436  }
1437  ```
1438
1439### readShortArray
1440
1441readShortArray(dataIn: number[]): void
1442
1443从MessageSequence实例中读取短整数数组。
1444
1445**系统能力**:SystemCapability.Communication.IPC.Core
1446
1447**参数:**
1448
1449  | 参数名 | 类型     | 必填 | 说明                 |
1450  | ------ | -------- | ---- | -------------------- |
1451  | dataIn | number[] | 是   | 要读取的短整数数组。 |
1452
1453**错误码:**
1454
1455以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1456
1457  | 错误码ID | 错误信息 |
1458  | -------- | -------- |
1459  | 1900010  | read data from message sequence failed |
1460
1461**示例:**
1462
1463  ```ts
1464  let data = rpc.MessageSequence.create();
1465  try {
1466      data.writeShortArray([11, 12, 13]);
1467  } catch(error) {
1468      console.info("rpc write shortArray fail, errorCode " + error.code);
1469      console.info("rpc write shortArray fail, errorMessage" + error.message);
1470  }
1471  try {
1472      let array = new Array(3);
1473      data.readShortArray(array);
1474  } catch(error) {
1475      console.info("rpc read shortArray fail, errorCode " + error.code);
1476      console.info("rpc read shortArray fail, errorMessage" + error.message);
1477  }
1478  ```
1479
1480### readShortArray
1481
1482readShortArray(): number[]
1483
1484从MessageSequence实例中读取短整数数组。
1485
1486**系统能力**:SystemCapability.Communication.IPC.Core
1487
1488**返回值:**
1489
1490  | 类型     | 说明             |
1491  | -------- | ---------------- |
1492  | number[] | 返回短整数数组。 |
1493
1494**错误码:**
1495
1496以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1497
1498  | 错误码ID | 错误信息 |
1499  | -------- | -------- |
1500  | 1900010  | read data from message sequence failed |
1501
1502**示例:**
1503
1504  ```ts
1505  let data = rpc.MessageSequence.create();
1506  try {
1507      data.writeShortArray([11, 12, 13]);
1508  } catch(error) {
1509      console.info("rpc write shortArray fail, errorCode " + error.code);
1510      console.info("rpc write shortArray fail, errorMessage" + error.message);
1511  }
1512  try {
1513      let array = data.readShortArray();
1514      console.log("RpcClient: readShortArray is " + array);
1515  } catch(error) {
1516      console.info("rpc read shortArray fail, errorCode " + error.code);
1517      console.info("rpc read shortArray fail, errorMessage" + error.message);
1518  }
1519  ```
1520
1521### writeIntArray
1522
1523writeIntArray(intArray: number[]): void
1524
1525将整数数组写入MessageSequence实例。
1526
1527**系统能力**:SystemCapability.Communication.IPC.Core
1528
1529**参数:**
1530
1531  | 参数名   | 类型     | 必填 | 说明               |
1532  | -------- | -------- | ---- | ------------------ |
1533  | intArray | number[] | 是   | 要写入的整数数组。 |
1534
1535**错误码:**
1536
1537以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1538
1539  | 错误码ID | 错误信息 |
1540  | -------- | -------- |
1541  | 1900009  | write data to message sequence failed |
1542
1543**示例:**
1544
1545  ```ts
1546  let data = rpc.MessageSequence.create();
1547  try {
1548      data.writeIntArray([100, 111, 112]);
1549  } catch(error) {
1550      console.info("rpc write intArray fail, errorCode " + error.code);
1551      console.info("rpc write intArray fail, errorMessage" + error.message);
1552  }
1553  ```
1554
1555### readIntArray
1556
1557readIntArray(dataIn: number[]): void
1558
1559从MessageSequence实例中读取整数数组。
1560
1561**系统能力**:SystemCapability.Communication.IPC.Core
1562
1563**参数:**
1564
1565  | 参数名 | 类型     | 必填 | 说明               |
1566  | ------ | -------- | ---- | ------------------ |
1567  | dataIn | number[] | 是   | 要读取的整数数组。 |
1568
1569**错误码:**
1570
1571以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1572
1573  | 错误码ID | 错误信息 |
1574  | -------- | -------- |
1575  | 1900010  | read data from message sequence failed |
1576
1577**示例:**
1578
1579  ```ts
1580  let data = rpc.MessageSequence.create();
1581  try {
1582      data.writeIntArray([100, 111, 112]);
1583  } catch(error) {
1584      console.info("rpc write intArray fail, errorCode " + error.code);
1585      console.info("rpc write intArray fail, errorMessage" + error.message);
1586  }
1587  let array = new Array(3);
1588  try {
1589      data.readIntArray(array);
1590  } catch(error) {
1591      console.info("rpc read intArray fail, errorCode " + error.code);
1592      console.info("rpc read intArray fail, errorMessage" + error.message);
1593  }
1594  ```
1595
1596### readIntArray
1597
1598readIntArray(): number[]
1599
1600从MessageSequence实例中读取整数数组。
1601
1602**系统能力**:SystemCapability.Communication.IPC.Core
1603
1604**返回值:**
1605
1606  | 类型     | 说明           |
1607  | -------- | -------------- |
1608  | number[] | 返回整数数组。 |
1609
1610**错误码:**
1611
1612以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1613
1614  | 错误码ID | 错误信息 |
1615  | -------- | -------- |
1616  | 1900010  | read data from message sequence failed |
1617
1618**示例:**
1619
1620  ```ts
1621  let data = rpc.MessageSequence.create();
1622  try {
1623      data.writeIntArray([100, 111, 112]);
1624  } catch(error) {
1625      console.info("rpc write intArray fail, errorCode " + error.code);
1626      console.info("rpc write intArray fail, errorMessage" + error.message);
1627  }
1628  try {
1629    let array = data.readIntArray();
1630    console.log("RpcClient: readIntArray is " + array);
1631  } catch(error) {
1632      console.info("rpc read intArray fail, errorCode " + error.code);
1633      console.info("rpc read intArray fail, errorMessage" + error.message);
1634  }
1635  ```
1636
1637### writeLongArray
1638
1639writeLongArray(longArray: number[]): void
1640
1641将长整数数组写入MessageSequence实例。
1642
1643**系统能力**:SystemCapability.Communication.IPC.Core
1644
1645**参数:**
1646
1647  | 参数名    | 类型     | 必填 | 说明                 |
1648  | --------- | -------- | ---- | -------------------- |
1649  | longArray | number[] | 是   | 要写入的长整数数组。 |
1650
1651**错误码:**
1652
1653以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1654
1655  | 错误码ID | 错误信息 |
1656  | -------- | -------- |
1657  | 1900009  | write data to message sequence failed |
1658
1659**示例:**
1660
1661  ```ts
1662  let data = rpc.MessageSequence.create();
1663  try {
1664      data.writeLongArray([1111, 1112, 1113]);
1665  }catch(error){
1666      console.info("rpc write longArray fail, errorCode " + error.code);
1667      console.info("rpc write longArray fail, errorMessage" + error.message);
1668  }
1669  ```
1670
1671### readLongArray
1672
1673readLongArray(dataIn: number[]): void
1674
1675从MessageSequence实例读取的长整数数组。
1676
1677**系统能力**:SystemCapability.Communication.IPC.Core
1678
1679**参数:**
1680
1681  | 参数名 | 类型     | 必填 | 说明                 |
1682  | ------ | -------- | ---- | -------------------- |
1683  | dataIn | number[] | 是   | 要读取的长整数数组。 |
1684
1685**错误码:**
1686
1687以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1688
1689  | 错误码ID | 错误信息 |
1690  | -------- | -------- |
1691  | 1900010  | read data from message sequence failed |
1692
1693**示例:**
1694
1695  ```ts
1696  let data = rpc.MessageSequence.create();
1697  try {
1698      data.writeLongArray([1111, 1112, 1113]);
1699  } catch(error) {
1700      console.info("rpc write longArray fail, errorCode " + error.code);
1701      console.info("rpc write longArray fail, errorMessage" + error.message);
1702  }
1703  let array = new Array(3);
1704  try {
1705      data.readLongArray(array);
1706  } catch(error) {
1707      console.info("rpc read longArray fail, errorCode " + error.code);
1708      console.info("rpc read longArray fail, errorMessage" + error.message);
1709  }
1710  ```
1711
1712### readLongArray
1713
1714readLongArray(): number[]
1715
1716从MessageSequence实例中读取所有的长整数数组。
1717
1718**系统能力**:SystemCapability.Communication.IPC.Core
1719
1720**返回值:**
1721
1722  | 类型     | 说明             |
1723  | -------- | ---------------- |
1724  | number[] | 返回长整数数组。 |
1725
1726**错误码:**
1727
1728以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1729
1730  | 错误码ID | 错误信息 |
1731  | -------- | -------- |
1732  | 1900010  | read data from message sequence failed |
1733
1734**示例:**
1735
1736  ```ts
1737  let data = rpc.MessageSequence.create();
1738  try {
1739      data.writeLongArray([1111, 1112, 1113]);
1740  } catch(error) {
1741      console.info("rpc write longArray fail, errorCode " + error.code);
1742      console.info("rpc write longArray fail, errorMessage" + error.message);
1743  }
1744  try {
1745      let array = data.readLongArray();
1746      console.log("RpcClient: readLongArray is " + array);
1747  } catch(error) {
1748      console.info("rpc read longArray fail, errorCode " + error.code);
1749      console.info("rpc read longArray fail, errorMessage" + error.message);
1750  }
1751  ```
1752
1753### writeFloatArray
1754
1755writeFloatArray(floatArray: number[]): void
1756
1757将浮点数组写入MessageSequence实例。
1758
1759**系统能力**:SystemCapability.Communication.IPC.Core
1760
1761**参数:**
1762
1763  | 参数名     | 类型     | 必填 | 说明                                                                                                                    |
1764  | ---------- | -------- | ---- | ----------------------------------------------------------------------------------------------------------------------- |
1765  | floatArray | number[] | 是   | 要写入的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |
1766
1767**错误码:**
1768
1769以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1770
1771  | 错误码ID | 错误信息 |
1772  | -------- | -------- |
1773  | 1900009  | write data to message sequence failed |
1774
1775**示例:**
1776
1777  ```ts
1778  let data = rpc.MessageSequence.create();
1779  try {
1780      data.writeFloatArray([1.2, 1.3, 1.4]);
1781  } catch(error) {
1782      console.info("rpc write floatArray fail, errorCode " + error.code);
1783      console.info("rpc write floatArray fail, errorMessage" + error.message);
1784  }
1785  ```
1786
1787### readFloatArray
1788
1789readFloatArray(dataIn: number[]): void
1790
1791从MessageSequence实例中读取浮点数组。
1792
1793**系统能力**:SystemCapability.Communication.IPC.Core
1794
1795**参数:**
1796
1797  | 参数名 | 类型     | 必填 | 说明                                                                                                                    |
1798  | ------ | -------- | ---- | ----------------------------------------------------------------------------------------------------------------------- |
1799  | dataIn | number[] | 是   | 要读取的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |
1800
1801**错误码:**
1802
1803以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1804
1805  | 错误码ID | 错误信息 |
1806  | -------- | -------- |
1807  | 1900010  | read data from message sequence failed |
1808
1809**示例:**
1810
1811  ```ts
1812  let data = rpc.MessageSequence.create();
1813  try {
1814      data.writeFloatArray([1.2, 1.3, 1.4]);
1815  }catch(error){
1816      console.info("rpc write floatArray fail, errorCode " + error.code);
1817      console.info("rpc write floatArray fail, errorMessage" + error.message);
1818  }
1819  let array = new Array(3);
1820  try {
1821      data.readFloatArray(array);
1822  } catch(error) {
1823      console.info("rpc read floatArray fail, errorCode " + error.code);
1824      console.info("rpc read floatArray fail, errorMessage" + error.message);
1825  }
1826  ```
1827
1828### readFloatArray
1829
1830readFloatArray(): number[]
1831
1832从MessageSequence实例中读取浮点数组。
1833
1834**系统能力**:SystemCapability.Communication.IPC.Core
1835
1836**返回值:**
1837
1838  | 类型     | 说明           |
1839  | -------- | -------------- |
1840  | number[] | 返回浮点数组。 |
1841
1842**错误码:**
1843
1844以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1845
1846  | 错误码ID | 错误信息 |
1847  | -------- | -------- |
1848  | 1900010  | read data from message sequence failed |
1849
1850**示例:**
1851
1852  ```ts
1853  let data = rpc.MessageSequence.create();
1854  try {
1855      data.writeFloatArray([1.2, 1.3, 1.4]);
1856  } catch(error) {
1857      console.info("rpc write floatArray fail, errorCode " + error.code);
1858      console.info("rpc write floatArray fail, errorMessage" + error.message);
1859  }
1860  try {
1861      let array = data.readFloatArray();
1862      console.log("RpcClient: readFloatArray is " + array);
1863  } catch(error) {
1864      console.info("rpc read floatArray fail, errorCode " + error.code);
1865      console.info("rpc read floatArray fail, errorMessage" + error.message);
1866  }
1867  ```
1868
1869### writeDoubleArray
1870
1871writeDoubleArray(doubleArray: number[]): void
1872
1873将双精度浮点数组写入MessageSequence实例。
1874
1875**系统能力**:SystemCapability.Communication.IPC.Core
1876
1877**参数:**
1878
1879  | 参数名      | 类型     | 必填 | 说明                     |
1880  | ----------- | -------- | ---- | ------------------------ |
1881  | doubleArray | number[] | 是   | 要写入的双精度浮点数组。 |
1882
1883**错误码:**
1884
1885以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1886
1887  | 错误码ID | 错误信息 |
1888  | -------- | -------- |
1889  | 1900009  | write data to message sequence failed |
1890
1891**示例:**
1892
1893  ```ts
1894  let data = rpc.MessageSequence.create();
1895  try {
1896      data.writeDoubleArray([11.1, 12.2, 13.3]);
1897  } catch(error) {
1898      console.info("rpc write doubleArray fail, errorCode " + error.code);
1899      console.info("rpc write doubleArray fail, errorMessage" + error.message);
1900  }
1901  ```
1902
1903### readDoubleArray
1904
1905readDoubleArray(dataIn: number[]): void
1906
1907从MessageSequence实例中读取双精度浮点数组。
1908
1909**系统能力**:SystemCapability.Communication.IPC.Core
1910
1911**参数:**
1912
1913  | 参数名 | 类型     | 必填 | 说明                     |
1914  | ------ | -------- | ---- | ------------------------ |
1915  | dataIn | number[] | 是   | 要读取的双精度浮点数组。 |
1916
1917**错误码:**
1918
1919以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1920
1921  | 错误码ID | 错误信息 |
1922  | -------- | -------- |
1923  | 1900010  | read data from message sequence failed |
1924
1925**示例:**
1926
1927  ```ts
1928  let data = rpc.MessageSequence.create();
1929  try {
1930      data.writeDoubleArray([11.1, 12.2, 13.3]);
1931  } catch(error) {
1932      console.info("rpc write doubleArray fail, errorCode " + error.code);
1933      console.info("rpc write doubleArray fail, errorMessage" + error.message);
1934  }
1935  let array = new Array(3);
1936  try {
1937      data.readDoubleArray(array);
1938  } catch(error) {
1939      console.info("rpc read doubleArray fail, errorCode " + error.code);
1940      console.info("rpc read doubleArray fail, errorMessage" + error.message);
1941  }
1942  ```
1943
1944### readDoubleArray
1945
1946readDoubleArray(): number[]
1947
1948从MessageSequence实例读取所有双精度浮点数组。
1949
1950**系统能力**:SystemCapability.Communication.IPC.Core
1951
1952**返回值:**
1953
1954  | 类型     | 说明                 |
1955  | -------- | -------------------- |
1956  | number[] | 返回双精度浮点数组。 |
1957
1958**错误码:**
1959
1960以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
1961
1962  | 错误码ID | 错误信息 |
1963  | -------- | -------- |
1964  | 1900010  | read data from message sequence failed |
1965
1966**示例:**
1967
1968  ```ts
1969  let data = rpc.MessageSequence.create();
1970  try {
1971      data.writeDoubleArray([11.1, 12.2, 13.3]);
1972  } catch(error) {
1973      console.info("rpc write doubleArray fail, errorCode " + error.code);
1974      console.info("rpc write doubleArray fail, errorMessage" + error.message);
1975  }
1976  try {
1977      let array = data.readDoubleArray();
1978      console.log("RpcClient: readDoubleArray is " + array);
1979  } catch(error) {
1980      console.info("rpc read doubleArray fail, errorCode " + error.code);
1981      console.info("rpc read doubleArray fail, errorMessage" + error.message);
1982  }
1983  ```
1984
1985### writeBooleanArray
1986
1987writeBooleanArray(booleanArray: boolean[]): void
1988
1989将布尔数组写入MessageSequence实例。
1990
1991**系统能力**:SystemCapability.Communication.IPC.Core
1992
1993**参数:**
1994
1995  | 参数名       | 类型      | 必填 | 说明               |
1996  | ------------ | --------- | ---- | ------------------ |
1997  | booleanArray | boolean[] | 是   | 要写入的布尔数组。 |
1998
1999**错误码:**
2000
2001以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2002
2003  | 错误码ID | 错误信息 |
2004  | -------- | -------- |
2005  | 1900009  | write data to message sequence failed |
2006
2007**示例:**
2008
2009  ```ts
2010  let data = rpc.MessageSequence.create();
2011  try {
2012      data.writeBooleanArray([false, true, false]);
2013  } catch(error) {
2014      console.info("rpc write booleanArray fail, errorCode " + error.code);
2015      console.info("rpc write booleanArray fail, errorMessage" + error.message);
2016  }
2017  ```
2018
2019### readBooleanArray
2020
2021readBooleanArray(dataIn: boolean[]): void
2022
2023从MessageSequence实例中读取布尔数组。
2024
2025**系统能力**:SystemCapability.Communication.IPC.Core
2026
2027**参数:**
2028
2029  | 参数名 | 类型      | 必填 | 说明               |
2030  | ------ | --------- | ---- | ------------------ |
2031  | dataIn | boolean[] | 是   | 要读取的布尔数组。 |
2032
2033**错误码:**
2034
2035以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2036
2037  | 错误码ID | 错误信息 |
2038  | -------- | -------- |
2039  | 1900010  | read data from message sequence failed |
2040
2041**示例:**
2042
2043  ```ts
2044  let data = rpc.MessageSequence.create();
2045  try {
2046      data.writeBooleanArray([false, true, false]);
2047  } catch(error) {
2048      console.info("rpc write booleanArray fail, errorCode " + error.code);
2049      console.info("rpc write booleanArray fail, errorMessage" + error.message);
2050  }
2051  let array = new Array(3);
2052  try {
2053      data.readBooleanArray(array);
2054  } catch(error) {
2055      console.info("rpc read booleanArray fail, errorCode " + error.code);
2056      console.info("rpc read booleanArray fail, errorMessage" + error.message);
2057  }
2058  ```
2059
2060### readBooleanArray
2061
2062readBooleanArray(): boolean[]
2063
2064从MessageSequence实例中读取所有布尔数组。
2065
2066**系统能力**:SystemCapability.Communication.IPC.Core
2067
2068**返回值:**
2069
2070  | 类型      | 说明           |
2071  | --------- | -------------- |
2072  | boolean[] | 返回布尔数组。 |
2073
2074**错误码:**
2075
2076以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2077
2078  | 错误码ID | 错误信息 |
2079  | -------- | -------- |
2080  | 1900010  | read data from message sequence failed |
2081
2082**示例:**
2083
2084  ```ts
2085  let data = rpc.MessageSequence.create();
2086  try {
2087      data.writeBooleanArray([false, true, false]);
2088  } catch(error) {
2089      console.info("rpc write booleanArray fail, errorCode " + error.code);
2090      console.info("rpc write booleanArray fail, errorMessage" + error.message);
2091  }
2092  try {
2093      let array = data.readBooleanArray();
2094      console.log("RpcClient: readBooleanArray is " + array);
2095  } catch(error) {
2096      console.info("rpc read booleanArray fail, errorCode " + error.code);
2097      console.info("rpc read booleanArray fail, errorMessage" + error.message);
2098  }
2099  ```
2100
2101### writeCharArray
2102
2103writeCharArray(charArray: number[]): void
2104
2105将单个字符数组写入MessageSequence实例。
2106
2107**系统能力**:SystemCapability.Communication.IPC.Core
2108
2109**参数:**
2110
2111  | 参数名    | 类型     | 必填 | 说明                   |
2112  | --------- | -------- | ---- | ---------------------- |
2113  | charArray | number[] | 是   | 要写入的单个字符数组。 |
2114
2115**错误码:**
2116
2117以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2118
2119  | 错误码ID | 错误信息 |
2120  | -------- | -------- |
2121  | 1900009  | write data to message sequence failed |
2122
2123**示例:**
2124
2125  ```ts
2126  let data = rpc.MessageSequence.create();
2127  try {
2128      data.writeCharArray([97, 98, 88]);
2129  } catch(error) {
2130      console.info("rpc write charArray fail, errorCode " + error.code);
2131      console.info("rpc write charArray fail, errorMessage" + error.message);
2132  }
2133  ```
2134
2135### readCharArray
2136
2137readCharArray(dataIn: number[]): void
2138
2139从MessageSequence实例中读取单个字符数组。
2140
2141**系统能力**:SystemCapability.Communication.IPC.Core
2142
2143**参数:**
2144
2145  | 参数名 | 类型     | 必填 | 说明                   |
2146  | ------ | -------- | ---- | ---------------------- |
2147  | dataIn | number[] | 是   | 要读取的单个字符数组。 |
2148
2149**错误码:**
2150
2151以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2152
2153  | 错误码ID | 错误信息 |
2154  | -------- | -------- |
2155  | 1900010  | read data from message sequence failed |
2156
2157**示例:**
2158
2159  ```ts
2160  let data = rpc.MessageSequence.create();
2161  try {
2162      data.writeCharArray([97, 98, 88]);
2163  } catch(error) {
2164      console.info("rpc write charArray fail, errorCode " + error.code);
2165      console.info("rpc write charArray fail, errorMessage" + error.message);
2166  }
2167  let array = new Array(3);
2168  try {
2169      data.readCharArray(array);
2170  } catch(error) {
2171      console.info("rpc read charArray fail, errorCode " + error.code);
2172      console.info("rpc read charArray fail, errorMessage" + error.message);
2173  }
2174  ```
2175
2176### readCharArray
2177
2178readCharArray(): number[]
2179
2180从MessageSequence实例读取单个字符数组。
2181
2182**系统能力**:SystemCapability.Communication.IPC.Core
2183
2184**返回值:**
2185
2186  | 类型     | 说明               |
2187  | -------- | ------------------ |
2188  | number[] | 返回单个字符数组。 |
2189
2190**错误码:**
2191
2192以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2193
2194  | 错误码ID | 错误信息 |
2195  | -------- | -------- |
2196  | 1900010  | read data from message sequence failed |
2197
2198**示例:**
2199
2200  ```ts
2201  let data = rpc.MessageSequence.create();
2202  try {
2203      data.writeCharArray([97, 98, 88]);
2204  } catch(error) {
2205      console.info("rpc write charArray fail, errorCode " + error.code);
2206      console.info("rpc write charArray fail, errorMessage" + error.message);
2207  }
2208  let array = new Array(3);
2209  try {
2210      let array = data.readCharArray();
2211      console.log("RpcClient: readCharArray is " + array);
2212  } catch(error) {
2213      console.info("rpc read charArray fail, errorCode " + error.code);
2214      console.info("rpc read charArray fail, errorMessage" + error.message);
2215  }
2216  ```
2217
2218### writeStringArray
2219
2220writeStringArray(stringArray: string[]): void
2221
2222将字符串数组写入MessageSequence实例。
2223
2224**系统能力**:SystemCapability.Communication.IPC.Core
2225
2226**参数:**
2227
2228  | 参数名      | 类型     | 必填 | 说明                                                    |
2229  | ----------- | -------- | ---- | ------------------------------------------------------- |
2230  | stringArray | string[] | 是   | 要写入的字符串数组,数组单个元素的长度应小于40960字节。 |
2231
2232**错误码:**
2233
2234以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2235
2236  | 错误码ID | 错误信息 |
2237  | -------- | -------- |
2238  | 1900009  | write data to message sequence failed |
2239
2240**示例:**
2241
2242  ```ts
2243  let data = rpc.MessageSequence.create();
2244  try {
2245      data.writeStringArray(["abc", "def"]);
2246  } catch(error) {
2247      console.info("rpc write stringArray fail, errorCode " + error.code);
2248      console.info("rpc write stringArray fail, errorMessage" + error.message);
2249  }
2250  ```
2251
2252### readStringArray
2253
2254readStringArray(dataIn: string[]): void
2255
2256从MessageSequence实例读取字符串数组。
2257
2258**系统能力**:SystemCapability.Communication.IPC.Core
2259
2260**参数:**
2261
2262  | 参数名 | 类型     | 必填 | 说明                 |
2263  | ------ | -------- | ---- | -------------------- |
2264  | dataIn | string[] | 是   | 要读取的字符串数组。 |
2265
2266**错误码:**
2267
2268以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2269
2270  | 错误码ID | 错误信息 |
2271  | -------- | -------- |
2272  | 1900010  | read data from message sequence failed |
2273
2274**示例:**
2275
2276  ```ts
2277  let data = rpc.MessageSequence.create();
2278  try {
2279      data.writeStringArray(["abc", "def"]);
2280  } catch(error) {
2281      console.info("rpc write stringArray fail, errorCode " + error.code);
2282      console.info("rpc write stringArray fail, errorMessage" + error.message);
2283  }
2284  let array = new Array(2);
2285  try {
2286      data.readStringArray(array);
2287  } catch(error) {
2288      console.info("rpc read stringArray fail, errorCode " + error.code);
2289      console.info("rpc read stringArray fail, errorMessage" + error.message);
2290  }
2291  ```
2292
2293### readStringArray
2294
2295readStringArray(): string[]
2296
2297从MessageSequence实例读取字符串数组。
2298
2299**系统能力**:SystemCapability.Communication.IPC.Core
2300
2301**返回值:**
2302
2303  | 类型     | 说明             |
2304  | -------- | ---------------- |
2305  | string[] | 返回字符串数组。 |
2306
2307**错误码:**
2308
2309以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2310
2311  | 错误码ID | 错误信息 |
2312  | -------- | -------- |
2313  | 1900010  | read data from message sequence failed |
2314
2315**示例:**
2316
2317  ```ts
2318  let data = rpc.MessageSequence.create();
2319  try {
2320      data.writeStringArray(["abc", "def"]);
2321  } catch(error) {
2322      console.info("rpc write stringArray fail, errorCode " + error.code);
2323      console.info("rpc write stringArray fail, errorMessage" + error.message);
2324  }
2325  try {
2326      let array = data.readStringArray();
2327      console.log("RpcClient: readStringArray is " + array);
2328  } catch(error) {
2329      console.info("rpc read stringArray fail, errorCode " + error.code);
2330      console.info("rpc read stringArray fail, errorMessage" + error.message);
2331  }
2332  ```
2333
2334### writeNoException
2335
2336writeNoException(): void
2337
2338向MessageSequence写入“指示未发生异常”的信息。
2339
2340**系统能力**:SystemCapability.Communication.IPC.Core
2341
2342**错误码:**
2343
2344以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2345
2346  | 错误码ID | 错误信息 |
2347  | -------- | -------- |
2348  | 1900009  | write data to message sequence failed |
2349
2350**示例:**
2351
2352  ```ts
2353  class TestRemoteObject extends rpc.RemoteObject {
2354      constructor(descriptor) {
2355          super(descriptor);
2356      }
2357
2358      onRemoteRequest(code, data, reply, option) {
2359          if (code === 1) {
2360              console.log("RpcServer: onRemoteRequest called");
2361              try {
2362                  reply.writeNoException();
2363              } catch(error) {
2364                  console.info("rpc write no exception fail, errorCode " + error.code);
2365                  console.info("rpc write no exception fail, errorMessage" + error.message);
2366              }
2367              return true;
2368          } else {
2369              console.log("RpcServer: unknown code: " + code);
2370              return false;
2371          }
2372      }
2373  }
2374  ```
2375
2376### readException
2377
2378readException(): void
2379
2380从MessageSequence中读取异常。
2381
2382**系统能力**:SystemCapability.Communication.IPC.Core
2383
2384**错误码:**
2385
2386以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2387
2388  | 错误码ID | 错误信息 |
2389  | -------- | -------- |
2390  | 1900010  | read data from message sequence failed |
2391
2392**示例:**
2393
2394  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
2395
2396  ```ts
2397  // 仅FA模型需要导入@ohos.ability.featureAbility
2398  // import FA from "@ohos.ability.featureAbility";
2399
2400  let proxy;
2401  let connect = {
2402      onConnect: function(elementName, remoteProxy) {
2403          console.log("RpcClient: js onConnect called.");
2404          proxy = remoteProxy;
2405      },
2406      onDisconnect: function(elementName) {
2407          console.log("RpcClient: onDisconnect");
2408      },
2409      onFailed: function() {
2410          console.log("RpcClient: onFailed");
2411      }
2412  };
2413  let want = {
2414      "bundleName": "com.ohos.server",
2415      "abilityName": "com.ohos.server.EntryAbility",
2416  };
2417
2418  // FA模型使用此方法连接服务
2419  // FA.connectAbility(want,connect);
2420
2421  globalThis.context.connectServiceExtensionAbility(want, connect);
2422  ```
2423
2424  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息
2425
2426  ```ts
2427  let option = new rpc.MessageOption();
2428  let data = rpc.MessageSequence.create();
2429  let reply = rpc.MessageSequence.create();
2430  data.writeInt(1);
2431  data.writeString("hello");
2432  proxy.sendMessageRequest(1, data, reply, option)
2433      .then(function(errCode) {
2434          if (errCode === 0) {
2435              console.log("sendMessageRequest got result");
2436              try {
2437                  reply.readException();
2438              } catch(error) {
2439                  console.info("rpc read exception fail, errorCode " + error.code);
2440                  console.info("rpc read no exception fail, errorMessage" + error.message);
2441              }
2442              let msg = reply.readString();
2443              console.log("RPCTest: reply msg: " + msg);
2444          } else {
2445              console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode);
2446          }
2447      }).catch(function(e) {
2448          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
2449      }).finally (() => {
2450          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
2451          data.reclaim();
2452          reply.reclaim();
2453      });
2454  ```
2455
2456### writeParcelableArray
2457
2458writeParcelableArray(parcelableArray: Parcelable[]): void
2459
2460将可序列化对象数组写入MessageSequence实例。
2461
2462**系统能力**:SystemCapability.Communication.IPC.Core
2463
2464**参数:**
2465
2466  | 参数名          | 类型         | 必填 | 说明                       |
2467  | --------------- | ------------ | ---- | -------------------------- |
2468  | parcelableArray | Parcelable[] | 是   | 要写入的可序列化对象数组。 |
2469
2470**错误码:**
2471
2472以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2473
2474  | 错误码ID | 错误信息 |
2475  | -------- | -------- |
2476  | 1900009  | write data to message sequence failed |
2477
2478**示例:**
2479
2480  ```ts
2481  class MyParcelable {
2482      num: number;
2483      str: string;
2484      constructor(num, str) {
2485          this.num = num;
2486          this.str = str;
2487      }
2488      marshalling(messageSequence) {
2489          messageSequence.writeInt(this.num);
2490          messageSequence.writeString(this.str);
2491          return true;
2492      }
2493      unmarshalling(messageSequence) {
2494          this.num = messageSequence.readInt();
2495          this.str = messageSequence.readString();
2496          return true;
2497      }
2498  }
2499  let parcelable = new MyParcelable(1, "aaa");
2500  let parcelable2 = new MyParcelable(2, "bbb");
2501  let parcelable3 = new MyParcelable(3, "ccc");
2502  let a = [parcelable, parcelable2, parcelable3];
2503  let data = rpc.MessageSequence.create();
2504  try {
2505      data.writeParcelableArray(a);
2506  } catch(error) {
2507      console.info("rpc write parcelable array fail, errorCode " + error.code);
2508      console.info("rpc write parcelable array fail, errorMessage" + error.message);
2509  }
2510  ```
2511
2512### readParcelableArray
2513
2514readParcelableArray(parcelableArray: Parcelable[]): void
2515
2516从MessageSequence实例读取可序列化对象数组。
2517
2518**系统能力**:SystemCapability.Communication.IPC.Core
2519
2520**参数:**
2521
2522  | 参数名          | 类型         | 必填 | 说明                       |
2523  | --------------- | ------------ | ---- | -------------------------- |
2524  | parcelableArray | Parcelable[] | 是   | 要读取的可序列化对象数组。 |
2525
2526**错误码:**
2527
2528以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2529
2530  | 错误码ID | 错误信息 |
2531  | -------- | -------- |
2532  | 1900010  | read data from message sequence failed |
2533  | 1900012  | call js callback function failed |
2534
2535**示例:**
2536
2537  ```ts
2538  class MyParcelable {
2539      num: number;
2540      str: string;
2541      constructor(num, str) {
2542          this.num = num;
2543          this.str = str;
2544      }
2545      marshalling(messageSequence) {
2546          messageSequence.writeInt(this.num);
2547          messageSequence.writeString(this.str);
2548          return true;
2549      }
2550      unmarshalling(messageSequence) {
2551          this.num = messageSequence.readInt();
2552          this.str = messageSequence.readString();
2553          return true;
2554      }
2555  }
2556  let parcelable = new MyParcelable(1, "aaa");
2557  let parcelable2 = new MyParcelable(2, "bbb");
2558  let parcelable3 = new MyParcelable(3, "ccc");
2559  let a = [parcelable, parcelable2, parcelable3];
2560  let data = rpc.MessageSequence.create();
2561  let result = data.writeParcelableArray(a);
2562  console.log("RpcClient: writeParcelableArray is " + result);
2563  let b = [new MyParcelable(0, ""), new MyParcelable(0, ""), new MyParcelable(0, "")];
2564  try {
2565      data.readParcelableArray(b);
2566  } catch(error) {
2567      console.info("rpc read parcelable array fail, errorCode " + error.code);
2568      console.info("rpc read parcelable array fail, errorMessage" + error.message);
2569  }
2570  data.readParcelableArray(b);
2571  ```
2572
2573### writeRemoteObjectArray
2574
2575writeRemoteObjectArray(objectArray: IRemoteObject[]): void
2576
2577将IRemoteObject对象数组写入MessageSequence。
2578
2579**系统能力**:SystemCapability.Communication.IPC.Core
2580
2581**参数:**
2582
2583  | 参数名      | 类型            | 必填 | 说明                                           |
2584  | ----------- | --------------- | ---- | ---------------------------------------------- |
2585  | objectArray | IRemoteObject[] | 是   | 要写入MessageSequence的IRemoteObject对象数组。 |
2586
2587**错误码:**
2588
2589以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2590
2591  | 错误码ID | 错误信息 |
2592  | -------- | -------- |
2593  | 1900009  | write data to message sequence failed |
2594
2595**示例:**
2596
2597  ```ts
2598  class TestRemoteObject extends rpc.RemoteObject {
2599      constructor(descriptor) {
2600          super(descriptor);
2601          this.modifyLocalInterface(this, descriptor);
2602      }
2603
2604      asObject(): rpc.IRemoteObject {
2605          return this;
2606      }
2607  }
2608  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
2609  let data = rpc.MessageSequence.create();
2610  let result = data.writeRemoteObjectArray(a);
2611  try {
2612      data.writeRemoteObjectArray(a);
2613  } catch(error) {
2614      console.info("rpc write remote object array fail, errorCode " + error.code);
2615      console.info("rpc write remote object array fail, errorMessage" + error.message);
2616  }
2617  console.log("RpcClient: writeRemoteObjectArray is " + result);
2618  ```
2619
2620### readRemoteObjectArray
2621
2622readRemoteObjectArray(objects: IRemoteObject[]): void
2623
2624从MessageSequence读取IRemoteObject对象数组。
2625
2626**系统能力**:SystemCapability.Communication.IPC.Core
2627
2628**参数:**
2629
2630  | 参数名  | 类型            | 必填 | 说明                                           |
2631  | ------- | --------------- | ---- | ---------------------------------------------- |
2632  | objects | IRemoteObject[] | 是   | 从MessageSequence读取的IRemoteObject对象数组。 |
2633
2634**错误码:**
2635
2636以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2637
2638  | 错误码ID | 错误信息 |
2639  | -------- | -------- |
2640  | 1900010  | read data from message sequence failed |
2641
2642**示例:**
2643
2644  ```ts
2645  class MyDeathRecipient {
2646      onRemoteDied() {
2647          console.log("server died");
2648      }
2649  }
2650  class TestRemoteObject extends rpc.RemoteObject {
2651      constructor(descriptor) {
2652          super(descriptor);
2653          this.modifyLocalInterface(this, descriptor);
2654      }
2655
2656      asObject(): rpc.IRemoteObject {
2657          return this;
2658      }
2659  }
2660  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
2661  let data = rpc.MessageSequence.create();
2662  data.writeRemoteObjectArray(a);
2663  let b = new Array(3);
2664  try {
2665      data.readRemoteObjectArray(b);
2666  } catch(error) {
2667      console.info("rpc read remote object array fail, errorCode " + error.code);
2668      console.info("rpc read remote object array fail, errorMessage" + error.message);
2669  }
2670  data.readRemoteObjectArray(b);
2671  ```
2672
2673### readRemoteObjectArray
2674
2675readRemoteObjectArray(): IRemoteObject[]
2676
2677从MessageSequence读取IRemoteObject对象数组。
2678
2679**系统能力**:SystemCapability.Communication.IPC.Core
2680
2681**返回值:**
2682
2683  | 类型            | 说明                        |
2684  | --------------- | --------------------------- |
2685  | IRemoteObject[] | 返回IRemoteObject对象数组。 |
2686
2687**错误码:**
2688
2689以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2690
2691  | 错误码ID | 错误信息 |
2692  | -------- | -------- |
2693  | 1900010  | read data from message sequence failed |
2694
2695**示例:**
2696
2697  ```ts
2698  class TestRemoteObject extends rpc.RemoteObject {
2699      constructor(descriptor) {
2700          super(descriptor);
2701          this.modifyLocalInterface(this, descriptor);
2702      }
2703
2704      asObject(): rpc.IRemoteObject {
2705          return this;
2706      }
2707  }
2708  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
2709  let data = rpc.MessageSequence.create();
2710  data.writeRemoteObjectArray(a);
2711  try {
2712      let b = data.readRemoteObjectArray();
2713      console.log("RpcClient: readRemoteObjectArray is " + b);
2714  } catch(error) {
2715      console.info("rpc read remote object array fail, errorCode " + error.code);
2716      console.info("rpc read remote object array fail, errorMessage" + error.message);
2717  }
2718  ```
2719
2720### closeFileDescriptor<sup>9+</sup>
2721
2722static closeFileDescriptor(fd: number): void
2723
2724静态方法,关闭给定的文件描述符。
2725
2726**系统能力**:SystemCapability.Communication.IPC.Core
2727
2728**参数:**
2729
2730  | 参数名 | 类型   | 必填 | 说明                 |
2731  | ------ | ------ | ---- | -------------------- |
2732  | fd     | number | 是   | 要关闭的文件描述符。 |
2733
2734**示例:**
2735
2736  ```ts
2737  import fs from '@ohos.file.fs';
2738  let filePath = "path/to/file";
2739  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
2740  try {
2741      rpc.MessageSequence.closeFileDescriptor(file.fd);
2742  } catch(error) {
2743      console.info("rpc close file descriptor fail, errorCode " + error.code);
2744      console.info("rpc close file descriptor fail, errorMessage" + error.message);
2745  }
2746  ```
2747
2748### dupFileDescriptor
2749
2750static dupFileDescriptor(fd: number) :number
2751
2752静态方法,复制给定的文件描述符。
2753
2754**系统能力**:SystemCapability.Communication.IPC.Core
2755
2756**参数:**
2757
2758  | 参数名 | 类型   | 必填 | 说明                     |
2759  | ------ | ------ | ---- | ------------------------ |
2760  | fd     | number | 是   | 表示已存在的文件描述符。 |
2761
2762**返回值:**
2763
2764  | 类型   | 说明                 |
2765  | ------ | -------------------- |
2766  | number | 返回新的文件描述符。 |
2767
2768**错误码:**
2769
2770以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2771
2772  | 错误码ID | 错误信息 |
2773  | -------- | -------- |
2774  | 1900013  | call os dup function failed |
2775
2776**示例:**
2777
2778  ```ts
2779  import fs from '@ohos.file.fs';
2780  let filePath = "path/to/file";
2781  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
2782  try {
2783      let newFd = rpc.MessageSequence.dupFileDescriptor(file.fd);
2784  } catch(error) {
2785      console.info("rpc dup file descriptor fail, errorCode " + error.code);
2786      console.info("rpc dup file descriptor fail, errorMessage" + error.message);
2787  }
2788  ```
2789
2790### containFileDescriptors
2791
2792containFileDescriptors(): boolean
2793
2794检查此MessageSequence对象是否包含文件描述符。
2795
2796**系统能力**:SystemCapability.Communication.IPC.Core
2797
2798**返回值:**
2799
2800  | 类型    | 说明                                                                 |
2801  | ------- | -------------------------------------------------------------------- |
2802  | boolean | true:包含文件描述符,false:不包含文件描述符。|
2803
2804**示例:**
2805
2806  ```ts
2807  import fs from '@ohos.file.fs';
2808  let sequence = new rpc.MessageSequence();
2809  let filePath = "path/to/file";
2810  let r1 = sequence.containFileDescriptors();
2811  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
2812  try {
2813      sequence.writeFileDescriptor(file.fd);
2814  } catch(error) {
2815      console.info("rpc write file descriptor fail, errorCode " + error.code);
2816      console.info("rpc write file descriptor fail, errorMessage" + error.message);
2817  }
2818  try {
2819      let containFD = sequence.containFileDescriptors();
2820      console.log("RpcTest: sequence after write fd containFd result is : " + containFD);
2821  } catch(error) {
2822      console.info("rpc contain file descriptor fail, errorCode " + error.code);
2823      console.info("rpc contain file descriptor fail, errorMessage" + error.message);
2824  }
2825  ```
2826
2827### writeFileDescriptor
2828
2829writeFileDescriptor(fd: number): void
2830
2831写入文件描述符到MessageSequence。
2832
2833**系统能力**:SystemCapability.Communication.IPC.Core
2834
2835**参数:**
2836
2837  | 参数名 | 类型   | 必填 | 说明         |
2838  | ------ | ------ | ---- | ------------ |
2839  | fd     | number | 是   | 文件描述符。 |
2840
2841**错误码:**
2842
2843以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2844
2845  | 错误码ID | 错误信息 |
2846  | -------- | -------- |
2847  | 1900009  | write data to message sequence failed |
2848
2849**示例:**
2850
2851  ```ts
2852  import fs from '@ohos.file.fs';
2853  let sequence = new rpc.MessageSequence();
2854  let filePath = "path/to/file";
2855  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
2856  try {
2857      sequence.writeFileDescriptor(file.fd);
2858  } catch(error) {
2859      console.info("rpc write file descriptor fail, errorCode " + error.code);
2860      console.info("rpc write file descriptor fail, errorMessage" + error.message);
2861  }
2862  ```
2863
2864### readFileDescriptor
2865
2866readFileDescriptor(): number
2867
2868从MessageSequence中读取文件描述符。
2869
2870**系统能力**:SystemCapability.Communication.IPC.Core
2871
2872**返回值:**
2873
2874  | 类型   | 说明             |
2875  | ------ | ---------------- |
2876  | number | 返回文件描述符。 |
2877
2878**错误码:**
2879
2880以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2881
2882  | 错误码ID | 错误信息 |
2883  | -------- | -------- |
2884  | 1900010  | read data from message sequence failed |
2885
2886**示例:**
2887
2888  ```ts
2889  import fs from '@ohos.file.fs';
2890  let sequence = new rpc.MessageSequence();
2891  let filePath = "path/to/file";
2892  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
2893  try {
2894      sequence.writeFileDescriptor(file.fd);
2895  } catch(error) {
2896      console.info("rpc write file descriptor fail, errorCode " + error.code);
2897      console.info("rpc write file descriptor fail, errorMessage" + error.message);
2898  }
2899  try {
2900      let readFD = sequence.readFileDescriptor();
2901  } catch(error) {
2902      console.info("rpc read file descriptor fail, errorCode " + error.code);
2903      console.info("rpc read file descriptor fail, errorMessage" + error.message);
2904  }
2905  ```
2906
2907### writeAshmem
2908
2909writeAshmem(ashmem: Ashmem): void
2910
2911将指定的匿名共享对象写入此MessageSequence。
2912
2913**系统能力**:SystemCapability.Communication.IPC.Core
2914
2915**参数:**
2916
2917  | 参数名 | 类型   | 必填 | 说明                                  |
2918  | ------ | ------ | ---- | ------------------------------------- |
2919  | ashmem | Ashmem | 是   | 要写入MessageSequence的匿名共享对象。 |
2920
2921**错误码:**
2922
2923以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2924
2925  | 错误码ID | 错误信息 |
2926  | -------- | ------- |
2927  | 1900003  | write to ashmem failed |
2928
2929**示例:**
2930
2931  ```ts
2932  let sequence = new rpc.MessageSequence();
2933  let ashmem;
2934  try {
2935      ashmem = rpc.Ashmem.create("ashmem", 1024);
2936  } catch(error) {
2937      console.info("rpc create ashmem fail, errorCode " + error.code);
2938      console.info("rpc creat ashmem fail, errorMessage" + error.message);
2939  }
2940  try {
2941      sequence.writeAshmem(ashmem);
2942  } catch(error) {
2943      console.info("rpc write ashmem fail, errorCode " + error.code);
2944      console.info("rpc write ashmem fail, errorMessage" + error.message);
2945  }
2946  ```
2947
2948### readAshmem
2949
2950readAshmem(): Ashmem
2951
2952从MessageSequence读取匿名共享对象。
2953
2954**系统能力**:SystemCapability.Communication.IPC.Core
2955
2956**返回值:**
2957
2958  | 类型   | 说明               |
2959  | ------ | ------------------ |
2960  | Ashmem | 返回匿名共享对象。 |
2961
2962**错误码:**
2963
2964以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2965
2966  | 错误码ID | 错误信息 |
2967  | -------- | -------- |
2968  | 1900004  | read from ashmem failed |
2969
2970**示例:**
2971
2972  ```ts
2973  let sequence = new rpc.MessageSequence();
2974  let ashmem;
2975  try {
2976      ashmem = rpc.Ashmem.create("ashmem", 1024);
2977  } catch(error) {
2978      console.info("rpc create ashmem fail, errorCode " + error.code);
2979      console.info("rpc creat ashmem fail, errorMessage" + error.message);
2980  }
2981  try {
2982      sequence.writeAshmem(ashmem);
2983  } catch(error) {
2984      console.info("rpc write ashmem fail, errorCode " + error.code);
2985      console.info("rpc write ashmem fail, errorMessage" + error.message);
2986  }
2987  try {
2988      let readAshmem = sequence.readAshmem();
2989      console.log("RpcTest: read ashmem to result is : " + readAshmem);
2990  } catch(error) {
2991      console.info("rpc read ashmem fail, errorCode " + error.code);
2992      console.info("rpc read ashmem fail, errorMessage" + error.message);
2993  }
2994  ```
2995
2996### getRawDataCapacity
2997
2998getRawDataCapacity(): number
2999
3000获取MessageSequence可以容纳的最大原始数据量。
3001
3002**系统能力**:SystemCapability.Communication.IPC.Core
3003
3004**返回值:**
3005
3006  | 类型   | 说明                                                         |
3007  | ------ | ------------------------------------------------------------ |
3008  | number | 返回MessageSequence可以容纳的最大原始数据量,即128&nbsp;Mb。 |
3009
3010**示例:**
3011
3012  ```ts
3013  let sequence = new rpc.MessageSequence();
3014  let result = sequence.getRawDataCapacity();
3015  console.log("RpcTest: sequence get RawDataCapacity result is : " + result);
3016  ```
3017
3018### writeRawData
3019
3020writeRawData(rawData: number[], size: number): void
3021
3022将原始数据写入MessageSequence对象。
3023
3024**系统能力**:SystemCapability.Communication.IPC.Core
3025
3026**参数:**
3027
3028  | 参数名  | 类型     | 必填 | 说明                               |
3029  | ------- | -------- | ---- | ---------------------------------- |
3030  | rawData | number[] | 是   | 要写入的原始数据。                 |
3031  | size    | number   | 是   | 发送的原始数据大小,以字节为单位。 |
3032
3033**错误码:**
3034
3035以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
3036
3037  | 错误码ID | 错误信息 |
3038  | -------- | -------- |
3039  | 1900009  | write data to message sequence failed |
3040
3041**示例:**
3042
3043  ```ts
3044  let sequence = new rpc.MessageSequence();
3045  let arr = [1, 2, 3, 4, 5];
3046  try {
3047      sequence.writeRawData(arr, arr.length);
3048  } catch(error) {
3049      console.info("rpc write rawdata fail, errorCode " + error.code);
3050      console.info("rpc write rawdata fail, errorMessage" + error.message);
3051  }
3052  ```
3053
3054### readRawData
3055
3056readRawData(size: number): number[]
3057
3058从MessageSequence读取原始数据。
3059
3060**系统能力**:SystemCapability.Communication.IPC.Core
3061
3062**参数:**
3063
3064  | 参数名 | 类型   | 必填 | 说明                     |
3065  | ------ | ------ | ---- | ------------------------ |
3066  | size   | number | 是   | 要读取的原始数据的大小。 |
3067
3068**返回值:**
3069
3070  | 类型     | 说明                           |
3071  | -------- | ------------------------------ |
3072  | number[] | 返回原始数据(以字节为单位)。 |
3073
3074**错误码:**
3075
3076以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
3077
3078  | 错误码ID | 错误信息 |
3079  | -------- | -------- |
3080  | 1900010  | read data from message sequence failed |
3081
3082**示例:**
3083
3084  ```ts
3085  let sequence = new rpc.MessageSequence();
3086  let arr = [1, 2, 3, 4, 5];
3087  try {
3088      sequence.writeRawData(arr, arr.length);
3089  } catch(error) {
3090      console.info("rpc write rawdata fail, errorCode " + error.code);
3091      console.info("rpc write rawdata fail, errorMessage" + error.message);
3092  }
3093  try {
3094      let result = sequence.readRawData(5);
3095      console.log("RpcTest: sequence read raw data result is : " + result);
3096  } catch(error) {
3097      console.info("rpc read rawdata fail, errorCode " + error.code);
3098      console.info("rpc read rawdata fail, errorMessage" + error.message);
3099  }
3100  ```
3101
3102## MessageParcel<sup>(deprecated)</sup>
3103
3104>从API version 9 开始不再维护,建议使用[MessageSequence](#messagesequence9)类替代。
3105
3106在RPC过程中,发送方可以使用MessageParcel提供的写方法,将待发送的数据以特定格式写入该对象。接收方可以使用MessageParcel提供的读方法从该对象中读取特定格式的数据。数据格式包括:基础类型及数组、IPC对象、接口描述符和自定义序列化对象。
3107
3108### create
3109
3110static create(): MessageParcel
3111
3112静态方法,创建MessageParcel对象。
3113
3114**系统能力**:SystemCapability.Communication.IPC.Core
3115
3116**返回值:**
3117
3118  | 类型          | 说明                          |
3119  | ------------- | ----------------------------- |
3120  | MessageParcel | 返回创建的MessageParcel对象。 |
3121
3122**示例:**
3123
3124  ```ts
3125  let data = rpc.MessageParcel.create();
3126  console.log("RpcClient: data is " + data);
3127  ```
3128
3129### reclaim
3130
3131reclaim(): void
3132
3133释放不再使用的MessageParcel对象。
3134
3135**系统能力**:SystemCapability.Communication.IPC.Core
3136
3137**示例:**
3138
3139  ```ts
3140  let reply = rpc.MessageParcel.create();
3141  reply.reclaim();
3142  ```
3143
3144### writeRemoteObject
3145
3146writeRemoteObject(object: [IRemoteObject](#iremoteobject)): boolean
3147
3148序列化远程对象并将其写入MessageParcel对象。
3149
3150**系统能力**:SystemCapability.Communication.IPC.Core
3151
3152**参数:**
3153
3154  | 参数名 | 类型                            | 必填 | 说明                                    |
3155  | ------ | ------------------------------- | ---- | --------------------------------------- |
3156  | object | [IRemoteObject](#iremoteobject) | 是   | 要序列化并写入MessageParcel的远程对象。 |
3157
3158**返回值:**
3159
3160  | 类型    | 说明                                      |
3161  | ------- | ----------------------------------------- |
3162  | boolean | true:操作成功,false:操作失败。|
3163
3164**示例:**
3165
3166  ```ts
3167  class MyDeathRecipient {
3168      onRemoteDied() {
3169          console.log("server died");
3170      }
3171  }
3172  class TestRemoteObject extends rpc.RemoteObject {
3173      constructor(descriptor) {
3174          super(descriptor);
3175      }
3176      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3177          return true;
3178      }
3179      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3180          return true;
3181      }
3182      isObjectDead(): boolean {
3183          return false;
3184      }
3185  }
3186  let data = rpc.MessageParcel.create();
3187  let testRemoteObject = new TestRemoteObject("testObject");
3188  data.writeRemoteObject(testRemoteObject);
3189  ```
3190
3191### readRemoteObject
3192
3193readRemoteObject(): IRemoteObject
3194
3195从MessageParcel读取远程对象。此方法用于反序列化MessageParcel对象以生成IRemoteObject。远程对象按写入MessageParcel的顺序读取。
3196
3197**系统能力**:SystemCapability.Communication.IPC.Core
3198
3199**返回值:**
3200
3201  | 类型                            | 说明               |
3202  | ------------------------------- | ------------------ |
3203  | [IRemoteObject](#iremoteobject) | 读取到的远程对象。 |
3204
3205**示例:**
3206
3207  ```ts
3208  class MyDeathRecipient {
3209      onRemoteDied() {
3210          console.log("server died");
3211      }
3212  }
3213  class TestRemoteObject extends rpc.RemoteObject {
3214      constructor(descriptor) {
3215          super(descriptor);
3216      }
3217      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3218          return true;
3219      }
3220      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3221          return true;
3222      }
3223      isObjectDead(): boolean {
3224          return false;
3225      }
3226  }
3227  let data = rpc.MessageParcel.create();
3228  let testRemoteObject = new TestRemoteObject("testObject");
3229  data.writeRemoteObject(testRemoteObject);
3230  let proxy = data.readRemoteObject();
3231  ```
3232
3233### writeInterfaceToken
3234
3235writeInterfaceToken(token: string): boolean
3236
3237将接口描述符写入MessageParcel对象,远端对象可使用该信息校验本次通信。
3238
3239**系统能力**:SystemCapability.Communication.IPC.Core
3240
3241**参数:**
3242
3243  | 参数名 | 类型   | 必填 | 说明               |
3244  | ------ | ------ | ---- | ------------------ |
3245  | token  | string | 是   | 字符串类型描述符。 |
3246
3247**返回值:**
3248
3249  | 类型    | 说明                                      |
3250  | ------- | ----------------------------------------- |
3251  | boolean | true:操作成功,false:操作失败。|
3252
3253**示例:**
3254
3255  ```ts
3256  let data = rpc.MessageParcel.create();
3257  let result = data.writeInterfaceToken("aaa");
3258  console.log("RpcServer: writeInterfaceToken is " + result);
3259  ```
3260
3261### readInterfaceToken
3262
3263readInterfaceToken(): string
3264
3265从MessageParcel中读取接口描述符,接口描述符按写入MessageParcel的顺序读取,本地对象可使用该信息检验本次通信。
3266
3267**系统能力**:SystemCapability.Communication.IPC.Core
3268
3269**返回值:**
3270
3271  | 类型   | 说明                     |
3272  | ------ | ------------------------ |
3273  | string | 返回读取到的接口描述符。 |
3274
3275**示例:**
3276
3277  ```ts
3278  class Stub extends rpc.RemoteObject {
3279      onRemoteMessageRequest(code, data, reply, option) {
3280          let interfaceToken = data.readInterfaceToken();
3281          console.log("RpcServer: interfaceToken is " + interfaceToken);
3282          return true;
3283      }
3284  }
3285  ```
3286
3287### getSize
3288
3289getSize(): number
3290
3291获取当前MessageParcel的数据大小。
3292
3293**系统能力**:SystemCapability.Communication.IPC.Core
3294
3295**返回值:**
3296
3297  | 类型   | 说明                                          |
3298  | ------ | --------------------------------------------- |
3299  | number | 获取的MessageParcel的数据大小。以字节为单位。 |
3300
3301**示例:**
3302
3303  ```ts
3304  let data = rpc.MessageParcel.create();
3305  let size = data.getSize();
3306  console.log("RpcClient: size is " + size);
3307  ```
3308
3309### getCapacity
3310
3311getCapacity(): number
3312
3313获取当前MessageParcel的容量。
3314
3315**系统能力**:SystemCapability.Communication.IPC.Core
3316
3317**返回值:**
3318
3319  | 类型   | 说明                                          |
3320  | ------ | --------------------------------------------- |
3321  | number | 获取的MessageParcel的容量大小。以字节为单位。 |
3322
3323**示例:**
3324
3325  ```ts
3326  let data = rpc.MessageParcel.create();
3327  let result = data.getCapacity();
3328  console.log("RpcClient: capacity is " + result);
3329  ```
3330
3331### setSize
3332
3333setSize(size: number): boolean
3334
3335设置MessageParcel实例中包含的数据大小。
3336
3337**系统能力**:SystemCapability.Communication.IPC.Core
3338
3339**参数:**
3340
3341  | 参数名 | 类型   | 必填 | 说明                                        |
3342  | ------ | ------ | ---- | ------------------------------------------- |
3343  | size   | number | 是   | MessageParcel实例的数据大小。以字节为单位。 |
3344
3345**返回值:**
3346
3347  | 类型    | 说明                              |
3348  | ------- | --------------------------------- |
3349  | boolean | true:设置成功,false:设置失败。|
3350
3351**示例:**
3352
3353  ```ts
3354  let data = rpc.MessageParcel.create();
3355  let setSize = data.setSize(16);
3356  console.log("RpcClient: setSize is " + setSize);
3357  ```
3358
3359### setCapacity
3360
3361setCapacity(size: number): boolean
3362
3363设置MessageParcel实例的存储容量。
3364
3365**系统能力**:SystemCapability.Communication.IPC.Core
3366
3367**参数:**
3368
3369  | 参数名 | 类型   | 必填 | 说明                                        |
3370  | ------ | ------ | ---- | ------------------------------------------- |
3371  | size   | number | 是   | MessageParcel实例的存储容量。以字节为单位。 |
3372
3373**返回值:**
3374
3375  | 类型    | 说明                              |
3376  | ------- | --------------------------------- |
3377  | boolean | true:设置成功,false:设置失败。|
3378
3379**示例:**
3380
3381  ```ts
3382  let data = rpc.MessageParcel.create();
3383  let result = data.setCapacity(100);
3384  console.log("RpcClient: setCapacity is " + result);
3385  ```
3386
3387### getWritableBytes
3388
3389getWritableBytes(): number
3390
3391获取MessageParcel的可写字节空间。
3392
3393**系统能力**:SystemCapability.Communication.IPC.Core
3394
3395**返回值:**
3396
3397  | 类型   | 说明                                                |
3398  | ------ | --------------------------------------------------- |
3399  | number | 获取到的MessageParcel的可写字节空间。以字节为单位。 |
3400
3401**示例:**
3402
3403  ```ts
3404  class Stub extends rpc.RemoteObject {
3405      onRemoteMessageRequest(code, data, reply, option) {
3406          let getWritableBytes = data.getWritableBytes();
3407          console.log("RpcServer: getWritableBytes is " + getWritableBytes);
3408          return true;
3409      }
3410  }
3411  ```
3412
3413### getReadableBytes
3414
3415getReadableBytes(): number
3416
3417获取MessageParcel的可读字节空间。
3418
3419**系统能力**:SystemCapability.Communication.IPC.Core
3420
3421**返回值:**
3422
3423  | 类型   | 说明                                                |
3424  | ------ | --------------------------------------------------- |
3425  | number | 获取到的MessageParcel的可读字节空间。以字节为单位。 |
3426
3427**示例:**
3428
3429  ```ts
3430  class Stub extends rpc.RemoteObject {
3431      onRemoteRequest(code, data, reply, option) {
3432          let result = data.getReadableBytes();
3433          console.log("RpcServer: getReadableBytes is " + result);
3434          return true;
3435      }
3436  }
3437  ```
3438
3439### getReadPosition
3440
3441getReadPosition(): number
3442
3443获取MessageParcel的读位置。
3444
3445**系统能力**:SystemCapability.Communication.IPC.Core
3446
3447**返回值:**
3448
3449  | 类型   | 说明                                    |
3450  | ------ | --------------------------------------- |
3451  | number | 返回MessageParcel实例中的当前读取位置。 |
3452
3453**示例:**
3454
3455  ```ts
3456  let data = rpc.MessageParcel.create();
3457  let readPos = data.getReadPosition();
3458  console.log("RpcClient: readPos is " + readPos);
3459  ```
3460
3461### getWritePosition
3462
3463getWritePosition(): number
3464
3465获取MessageParcel的写位置。
3466
3467**系统能力**:SystemCapability.Communication.IPC.Core
3468
3469**返回值:**
3470
3471  | 类型   | 说明                                    |
3472  | ------ | --------------------------------------- |
3473  | number | 返回MessageParcel实例中的当前写入位置。 |
3474
3475**示例:**
3476
3477  ```ts
3478  let data = rpc.MessageParcel.create();
3479  data.writeInt(10);
3480  let bwPos = data.getWritePosition();
3481  console.log("RpcClient: bwPos is " + bwPos);
3482  ```
3483
3484### rewindRead
3485
3486rewindRead(pos: number): boolean
3487
3488重新偏移读取位置到指定的位置。
3489
3490**系统能力**:SystemCapability.Communication.IPC.Core
3491
3492**参数:**
3493
3494  | 参数名 | 类型   | 必填 | 说明                     |
3495  | ------ | ------ | ---- | ------------------------ |
3496  | pos    | number | 是   | 开始读取数据的目标位置。 |
3497
3498**返回值:**
3499
3500  | 类型    | 说明                                              |
3501  | ------- | ------------------------------------------------- |
3502  | boolean | true:读取位置发生更改,false:读取位置未发生更改。|
3503
3504**示例:**
3505
3506  ```ts
3507  let data = rpc.MessageParcel.create();
3508  data.writeInt(12);
3509  data.writeString("parcel");
3510  let number = data.readInt();
3511  console.log("RpcClient: number is " + number);
3512  data.rewindRead(0);
3513  let number2 = data.readInt();
3514  console.log("RpcClient: rewindRead is " + number2);
3515  ```
3516
3517### rewindWrite
3518
3519rewindWrite(pos: number): boolean
3520
3521重新偏移写位置到指定的位置。
3522
3523**系统能力**:SystemCapability.Communication.IPC.Core
3524
3525**参数:**
3526
3527  | 参数名 | 类型   | 必填 | 说明                     |
3528  | ------ | ------ | ---- | ------------------------ |
3529  | pos    | number | 是   | 开始写入数据的目标位置。 |
3530
3531**返回值:**
3532
3533  | 类型    | 说明                                          |
3534  | ------- | --------------------------------------------- |
3535  | boolean | true:写入位置发生更改,false:写入位置未发生更改。|
3536
3537**示例:**
3538
3539  ```ts
3540  let data = rpc.MessageParcel.create();
3541  data.writeInt(4);
3542  data.rewindWrite(0);
3543  data.writeInt(5);
3544  let number = data.readInt();
3545  console.log("RpcClient: rewindWrite is: " + number);
3546  ```
3547
3548### writeByte
3549
3550writeByte(val: number): boolean
3551
3552将字节值写入MessageParcel实例。
3553
3554**系统能力**:SystemCapability.Communication.IPC.Core
3555
3556**参数:**
3557
3558  | 参数名 | 类型   | 必填 | 说明             |
3559  | ------ | ------ | ---- | ---------------- |
3560  | val    | number | 是   | 要写入的字节值。 |
3561
3562**返回值:**
3563
3564  | 类型    | 说明                          |
3565  | ------- | ----------------------------- |
3566  | boolean | true:写入成功,false:写入失败。 |
3567
3568**示例:**
3569
3570  ```ts
3571  let data = rpc.MessageParcel.create();
3572  let result = data.writeByte(2);
3573  console.log("RpcClient: writeByte is: " + result);
3574  ```
3575
3576### readByte
3577
3578readByte(): number
3579
3580从MessageParcel实例读取字节值。
3581
3582**系统能力**:SystemCapability.Communication.IPC.Core
3583
3584**返回值:**
3585
3586  | 类型   | 说明         |
3587  | ------ | ------------ |
3588  | number | 返回字节值。 |
3589
3590**示例:**
3591
3592  ```ts
3593  let data = rpc.MessageParcel.create();
3594  let result = data.writeByte(2);
3595  console.log("RpcClient: writeByte is: " + result);
3596  let ret = data.readByte();
3597  console.log("RpcClient: readByte is: " + ret);
3598  ```
3599
3600### writeShort
3601
3602writeShort(val: number): boolean
3603
3604将短整数值写入MessageParcel实例。
3605
3606**系统能力**:SystemCapability.Communication.IPC.Core
3607
3608**参数:**
3609
3610  | 参数名 | 类型   | 必填 | 说明               |
3611  | ------ | ------ | ---- | ------------------ |
3612  | val    | number | 是   | 要写入的短整数值。 |
3613
3614**返回值:**
3615
3616  | 类型    | 说明                          |
3617  | ------- | ----------------------------- |
3618  | boolean | true:写入成功,false:写入失败。|
3619
3620**示例:**
3621
3622  ```ts
3623  let data = rpc.MessageParcel.create();
3624  let result = data.writeShort(8);
3625  console.log("RpcClient: writeShort is: " + result);
3626  ```
3627
3628### readShort
3629
3630readShort(): number
3631
3632从MessageParcel实例读取短整数值。
3633
3634**系统能力**:SystemCapability.Communication.IPC.Core
3635
3636**返回值:**
3637
3638  | 类型   | 说明           |
3639  | ------ | -------------- |
3640  | number | 返回短整数值。 |
3641
3642**示例:**
3643
3644  ```ts
3645  let data = rpc.MessageParcel.create();
3646  let result = data.writeShort(8);
3647  console.log("RpcClient: writeShort is: " + result);
3648  let ret = data.readShort();
3649  console.log("RpcClient: readShort is: " + ret);
3650  ```
3651
3652### writeInt
3653
3654writeInt(val: number): boolean
3655
3656将整数值写入MessageParcel实例。
3657
3658**系统能力**:SystemCapability.Communication.IPC.Core
3659
3660**参数:**
3661
3662  | 参数名 | 类型   | 必填 | 说明             |
3663  | ------ | ------ | ---- | ---------------- |
3664  | val    | number | 是   | 要写入的整数值。 |
3665
3666**返回值:**
3667
3668  | 类型    | 说明                          |
3669  | ------- | ----------------------------- |
3670  | boolean | true:写入成功,false:写入失败。 |
3671
3672**示例:**
3673
3674  ```ts
3675  let data = rpc.MessageParcel.create();
3676  let result = data.writeInt(10);
3677  console.log("RpcClient: writeInt is " + result);
3678  ```
3679
3680### readInt
3681
3682readInt(): number
3683
3684从MessageParcel实例读取整数值。
3685
3686**系统能力**:SystemCapability.Communication.IPC.Core
3687
3688**返回值:**
3689
3690  | 类型   | 说明         |
3691  | ------ | ------------ |
3692  | number | 返回整数值。 |
3693
3694**示例:**
3695
3696  ```ts
3697  let data = rpc.MessageParcel.create();
3698  let result = data.writeInt(10);
3699  console.log("RpcClient: writeInt is " + result);
3700  let ret = data.readInt();
3701  console.log("RpcClient: readInt is " + ret);
3702  ```
3703
3704### writeLong
3705
3706writeLong(val: number): boolean
3707
3708将长整数值写入MessageParcel实例。
3709
3710**系统能力**:SystemCapability.Communication.IPC.Core
3711
3712**参数:**
3713
3714  | 参数名 | 类型   | 必填 | 说明             |
3715  | ------ | ------ | ---- | ---------------- |
3716  | val    | number | 是   | 要写入的长整数值 |
3717
3718**返回值:**
3719
3720  | 类型    | 说明                              |
3721  | ------- | --------------------------------- |
3722  | boolean | true:写入成功,false:写入失败。|
3723
3724**示例:**
3725
3726  ```ts
3727  let data = rpc.MessageParcel.create();
3728  let result = data.writeLong(10000);
3729  console.log("RpcClient: writeLong is " + result);
3730  ```
3731
3732### readLong
3733
3734readLong(): number
3735
3736从MessageParcel实例中读取长整数值。
3737
3738**系统能力**:SystemCapability.Communication.IPC.Core
3739
3740**返回值:**
3741
3742  | 类型   | 说明           |
3743  | ------ | -------------- |
3744  | number | 返回长整数值。 |
3745
3746**示例:**
3747
3748  ```ts
3749  let data = rpc.MessageParcel.create();
3750  let result = data.writeLong(10000);
3751  console.log("RpcClient: writeLong is " + result);
3752  let ret = data.readLong();
3753  console.log("RpcClient: readLong is " + ret);
3754  ```
3755
3756### writeFloat
3757
3758writeFloat(val: number): boolean
3759
3760将浮点值写入MessageParcel实例。
3761
3762**系统能力**:SystemCapability.Communication.IPC.Core
3763
3764**参数:**
3765
3766  | 参数名 | 类型   | 必填 | 说明             |
3767  | ------ | ------ | ---- | ---------------- |
3768  | val    | number | 是   | 要写入的浮点值。 |
3769
3770**返回值:**
3771
3772  | 类型    | 说明                              |
3773  | ------- | --------------------------------- |
3774  | boolean | true:写入成功,false:写入失败。|
3775
3776**示例:**
3777
3778  ```ts
3779  let data = rpc.MessageParcel.create();
3780  let result = data.writeFloat(1.2);
3781  console.log("RpcClient: writeFloat is " + result);
3782  ```
3783
3784### readFloat
3785
3786readFloat(): number
3787
3788从MessageParcel实例中读取浮点值。
3789
3790**系统能力**:SystemCapability.Communication.IPC.Core
3791
3792**返回值:**
3793
3794  | 类型   | 说明         |
3795  | ------ | ------------ |
3796  | number | 返回浮点值。 |
3797
3798**示例:**
3799
3800  ```ts
3801  let data = rpc.MessageParcel.create();
3802  let result = data.writeFloat(1.2);
3803  console.log("RpcClient: writeFloat is " + result);
3804  let ret = data.readFloat();
3805  console.log("RpcClient: readFloat is " + ret);
3806  ```
3807
3808### writeDouble
3809
3810writeDouble(val: number): boolean
3811
3812将双精度浮点值写入MessageParcel实例。
3813
3814**系统能力**:SystemCapability.Communication.IPC.Core
3815
3816**参数:**
3817
3818  | 参数名 | 类型   | 必填 | 说明                   |
3819  | ------ | ------ | ---- | ---------------------- |
3820  | val    | number | 是   | 要写入的双精度浮点值。 |
3821
3822**返回值:**
3823
3824  | 类型    | 说明                              |
3825  | ------- | --------------------------------- |
3826  | boolean | true:写入成功,false:写入失败。|
3827
3828**示例:**
3829
3830  ```ts
3831  let data = rpc.MessageParcel.create();
3832  let result = data.writeDouble(10.2);
3833  console.log("RpcClient: writeDouble is " + result);
3834  ```
3835
3836### readDouble
3837
3838readDouble(): number
3839
3840从MessageParcel实例读取双精度浮点值。
3841
3842**系统能力**:SystemCapability.Communication.IPC.Core
3843
3844**返回值:**
3845
3846  | 类型   | 说明               |
3847  | ------ | ------------------ |
3848  | number | 返回双精度浮点值。 |
3849
3850**示例:**
3851
3852  ```ts
3853  let data = rpc.MessageParcel.create();
3854  let result = data.writeDouble(10.2);
3855  console.log("RpcClient: writeDouble is " + result);
3856  let ret = data.readDouble();
3857  console.log("RpcClient: readDouble is " + ret);
3858  ```
3859
3860### writeBoolean
3861
3862writeBoolean(val: boolean): boolean
3863
3864将布尔值写入MessageParcel实例。
3865
3866**系统能力**:SystemCapability.Communication.IPC.Core
3867
3868**参数:**
3869
3870  | 参数名 | 类型    | 必填 | 说明             |
3871  | ------ | ------- | ---- | ---------------- |
3872  | val    | boolean | 是   | 要写入的布尔值。 |
3873
3874**返回值:**
3875
3876  | 类型    | 说明                              |
3877  | ------- | --------------------------------- |
3878  | boolean | true:写入成功,false:写入失败。|
3879
3880**示例:**
3881
3882  ```ts
3883  let data = rpc.MessageParcel.create();
3884  let result = data.writeBoolean(false);
3885  console.log("RpcClient: writeBoolean is " + result);
3886  ```
3887
3888### readBoolean
3889
3890readBoolean(): boolean
3891
3892从MessageParcel实例读取布尔值。
3893
3894**系统能力**:SystemCapability.Communication.IPC.Core
3895
3896**返回值:**
3897
3898  | 类型    | 说明                 |
3899  | ------- | -------------------- |
3900  | boolean | 返回读取到的布尔值。 |
3901
3902**示例:**
3903
3904  ```ts
3905  let data = rpc.MessageParcel.create();
3906  let result = data.writeBoolean(false);
3907  console.log("RpcClient: writeBoolean is " + result);
3908  let ret = data.readBoolean();
3909  console.log("RpcClient: readBoolean is " + ret);
3910  ```
3911
3912### writeChar
3913
3914writeChar(val: number): boolean
3915
3916将单个字符值写入MessageParcel实例。
3917
3918**系统能力**:SystemCapability.Communication.IPC.Core
3919
3920**参数:**
3921
3922  | 参数名 | 类型   | 必填 | 说明                 |
3923  | ------ | ------ | ---- | -------------------- |
3924  | val    | number | 是   | 要写入的单个字符值。 |
3925
3926**返回值:**
3927
3928  | 类型    | 说明                          |
3929  | ------- | ----------------------------- |
3930  | boolean | true:写入成功,false:写入失败。|
3931
3932**示例:**
3933
3934  ```ts
3935  let data = rpc.MessageParcel.create();
3936  let result = data.writeChar(97);
3937  console.log("RpcClient: writeChar is " + result);
3938  ```
3939
3940### readChar
3941
3942readChar(): number
3943
3944从MessageParcel实例中读取单个字符值。
3945
3946**系统能力**:SystemCapability.Communication.IPC.Core
3947
3948**返回值:**
3949
3950  | 类型   | 说明             |
3951  | ------ | ---------------- |
3952  | number | 返回单个字符值。 |
3953
3954**示例:**
3955
3956  ```ts
3957  let data = rpc.MessageParcel.create();
3958  let result = data.writeChar(97);
3959  console.log("RpcClient: writeChar is " + result);
3960  let ret = data.readChar();
3961  console.log("RpcClient: readChar is " + ret);
3962  ```
3963
3964### writeString
3965
3966writeString(val: string): boolean
3967
3968将字符串值写入MessageParcel实例。
3969
3970**系统能力**:SystemCapability.Communication.IPC.Core
3971
3972**参数:**
3973
3974  | 参数名 | 类型   | 必填 | 说明                                      |
3975  | ------ | ------ | ---- | ----------------------------------------- |
3976  | val    | string | 是   | 要写入的字符串值,其长度应小于40960字节。 |
3977
3978**返回值:**
3979
3980  | 类型    | 说明                              |
3981  | ------- | --------------------------------- |
3982  | boolean | true:写入成功,false:写入失败。|
3983
3984**示例:**
3985
3986  ```ts
3987  let data = rpc.MessageParcel.create();
3988  let result = data.writeString('abc');
3989  console.log("RpcClient: writeString  is " + result);
3990  ```
3991
3992### readString
3993
3994readString(): string
3995
3996从MessageParcel实例读取字符串值。
3997
3998**系统能力**:SystemCapability.Communication.IPC.Core
3999
4000**返回值:**
4001
4002  | 类型   | 说明           |
4003  | ------ | -------------- |
4004  | string | 返回字符串值。 |
4005
4006**示例:**
4007
4008  ```ts
4009  let data = rpc.MessageParcel.create();
4010  let result = data.writeString('abc');
4011  console.log("RpcClient: writeString  is " + result);
4012  let ret = data.readString();
4013  console.log("RpcClient: readString is " + ret);
4014  ```
4015
4016### writeSequenceable
4017
4018writeSequenceable(val: Sequenceable): boolean
4019
4020将自定义序列化对象写入MessageParcel实例。
4021
4022**系统能力**:SystemCapability.Communication.IPC.Core
4023
4024**参数:**
4025
4026  | 参数名 | 类型                          | 必填 | 说明                 |
4027  | ------ | ----------------------------- | ---- | -------------------- |
4028  | val    | [Sequenceable](#sequenceable) | 是   | 要写入的可序列对象。 |
4029
4030**返回值:**
4031
4032  | 类型    | 说明                             |
4033  | ------- | -------------------------------- |
4034  | boolean | true:写入成功,false:写入失败。|
4035
4036**示例:**
4037
4038  ```ts
4039  class MySequenceable {
4040      num: number;
4041      str: string;
4042      constructor(num, str) {
4043          this.num = num;
4044          this.str = str;
4045      }
4046      marshalling(messageParcel) {
4047          messageParcel.writeInt(this.num);
4048          messageParcel.writeString(this.str);
4049          return true;
4050      }
4051      unmarshalling(messageParcel) {
4052          this.num = messageParcel.readInt();
4053          this.str = messageParcel.readString();
4054          return true;
4055      }
4056  }
4057  let sequenceable = new MySequenceable(1, "aaa");
4058  let data = rpc.MessageParcel.create();
4059  let result = data.writeSequenceable(sequenceable);
4060  console.log("RpcClient: writeSequenceable is " + result);
4061  ```
4062
4063### readSequenceable
4064
4065readSequenceable(dataIn: Sequenceable): boolean
4066
4067从MessageParcel实例中读取成员变量到指定的对象(dataIn)。
4068
4069**系统能力**:SystemCapability.Communication.IPC.Core
4070
4071**参数:**
4072
4073  | 参数名 | 类型                          | 必填    | 说明                                           |
4074  | ------ | ----------------------------- | ------- | ---------------------------------------------- |
4075  | dataIn | [Sequenceable](#sequenceabledeprecated) | 是   | 需要从MessageParcel读取成员变量的对象。 |
4076
4077**返回值:**
4078
4079  | 类型    | 说明                                     |
4080  | ------- | ---------------------------------------- |
4081  | boolean | true:反序列化成功,false:反序列化失败。|
4082
4083**示例:**
4084
4085  ```ts
4086  class MySequenceable {
4087      num: number;
4088      str: string;
4089      constructor(num, str) {
4090          this.num = num;
4091          this.str = str;
4092      }
4093      marshalling(messageParcel) {
4094          messageParcel.writeInt(this.num);
4095          messageParcel.writeString(this.str);
4096          return true;
4097      }
4098      unmarshalling(messageParcel) {
4099          this.num = messageParcel.readInt();
4100          this.str = messageParcel.readString();
4101          return true;
4102      }
4103  }
4104  let sequenceable = new MySequenceable(1, "aaa");
4105  let data = rpc.MessageParcel.create();
4106  let result = data.writeSequenceable(sequenceable);
4107  console.log("RpcClient: writeSequenceable is " + result);
4108  let ret = new MySequenceable(0, "");
4109  let result2 = data.readSequenceable(ret);
4110  console.log("RpcClient: writeSequenceable is " + result2);
4111  ```
4112
4113### writeByteArray
4114
4115writeByteArray(byteArray: number[]): boolean
4116
4117将字节数组写入MessageParcel实例。
4118
4119**系统能力**:SystemCapability.Communication.IPC.Core
4120
4121**参数:**
4122
4123  | 参数名    | 类型     | 必填 | 说明               |
4124  | --------- | -------- | ---- | ------------------ |
4125  | byteArray | number[] | 是   | 要写入的字节数组。 |
4126
4127**返回值:**
4128
4129  | 类型    | 说明                             |
4130  | ------- | -------------------------------- |
4131  | boolean | true:写入成功,false:写入失败。|
4132
4133**示例:**
4134
4135  ```ts
4136  let data = rpc.MessageParcel.create();
4137  let ByteArrayVar = [1, 2, 3, 4, 5];
4138  let result = data.writeByteArray(ByteArrayVar);
4139  console.log("RpcClient: writeByteArray is " + result);
4140  ```
4141
4142### readByteArray
4143
4144readByteArray(dataIn: number[]): void
4145
4146从MessageParcel实例读取字节数组。
4147
4148**系统能力**:SystemCapability.Communication.IPC.Core
4149
4150**参数:**
4151
4152  | 参数名 | 类型     | 必填 | 说明               |
4153  | ------ | -------- | ---- | ------------------ |
4154  | dataIn | number[] | 是   | 要读取的字节数组。 |
4155
4156**示例:**
4157
4158  ```ts
4159  let data = rpc.MessageParcel.create();
4160  let ByteArrayVar = [1, 2, 3, 4, 5];
4161  let result = data.writeByteArray(ByteArrayVar);
4162  console.log("RpcClient: writeByteArray is " + result);
4163  let array = new Array(5);
4164  data.readByteArray(array);
4165  ```
4166
4167### readByteArray
4168
4169readByteArray(): number[]
4170
4171从MessageParcel实例中读取字节数组。
4172
4173**系统能力**:SystemCapability.Communication.IPC.Core
4174
4175**返回值:**
4176
4177  | 类型     | 说明           |
4178  | -------- | -------------- |
4179  | number[] | 返回字节数组。 |
4180
4181**示例:**
4182
4183  ```ts
4184  let data = rpc.MessageParcel.create();
4185  let ByteArrayVar = [1, 2, 3, 4, 5];
4186  let result = data.writeByteArray(ByteArrayVar);
4187  console.log("RpcClient: writeByteArray is " + result);
4188  let array = data.readByteArray();
4189  console.log("RpcClient: readByteArray is " + array);
4190  ```
4191
4192### writeShortArray
4193
4194writeShortArray(shortArray: number[]): boolean
4195
4196将短整数数组写入MessageParcel实例。
4197
4198**系统能力**:SystemCapability.Communication.IPC.Core
4199
4200**参数:**
4201
4202  | 参数名     | 类型     | 必填 | 说明                 |
4203  | ---------- | -------- | ---- | -------------------- |
4204  | shortArray | number[] | 是   | 要写入的短整数数组。 |
4205
4206**返回值:**
4207
4208  | 类型    | 说明                             |
4209  | ------- | -------------------------------- |
4210  | boolean | true:写入成功,false:写入失败。|
4211
4212**示例:**
4213
4214  ```ts
4215  let data = rpc.MessageParcel.create();
4216  let result = data.writeShortArray([11, 12, 13]);
4217  console.log("RpcClient: writeShortArray is " + result);
4218  ```
4219
4220### readShortArray
4221
4222readShortArray(dataIn: number[]): void
4223
4224从MessageParcel实例中读取短整数数组。
4225
4226**系统能力**:SystemCapability.Communication.IPC.Core
4227
4228**参数:**
4229
4230  | 参数名 | 类型     | 必填 | 说明                 |
4231  | ------ | -------- | ---- | -------------------- |
4232  | dataIn | number[] | 是   | 要读取的短整数数组。 |
4233
4234**示例:**
4235
4236  ```ts
4237  let data = rpc.MessageParcel.create();
4238  let result = data.writeShortArray([11, 12, 13]);
4239  console.log("RpcClient: writeShortArray is " + result);
4240  let array = new Array(3);
4241  data.readShortArray(array);
4242  ```
4243
4244### readShortArray
4245
4246readShortArray(): number[]
4247
4248从MessageParcel实例中读取短整数数组。
4249
4250**系统能力**:SystemCapability.Communication.IPC.Core
4251
4252**返回值:**
4253
4254  | 类型     | 说明             |
4255  | -------- | ---------------- |
4256  | number[] | 返回短整数数组。 |
4257
4258**示例:**
4259
4260  ```ts
4261  let data = rpc.MessageParcel.create();
4262  let result = data.writeShortArray([11, 12, 13]);
4263  console.log("RpcClient: writeShortArray is " + result);
4264  let array = data.readShortArray();
4265 console.log("RpcClient: readShortArray is " + array);
4266  ```
4267
4268### writeIntArray
4269
4270writeIntArray(intArray: number[]): boolean
4271
4272将整数数组写入MessageParcel实例。
4273
4274**系统能力**:SystemCapability.Communication.IPC.Core
4275
4276**参数:**
4277
4278  | 参数名   | 类型     | 必填 | 说明               |
4279  | -------- | -------- | ---- | ------------------ |
4280  | intArray | number[] | 是   | 要写入的整数数组。 |
4281
4282**返回值:**
4283
4284  | 类型    | 说明                             |
4285  | ------- | -------------------------------- |
4286  | boolean | true:写入成功,false:写入失败。|
4287
4288**示例:**
4289
4290  ```ts
4291  let data = rpc.MessageParcel.create();
4292  let result = data.writeIntArray([100, 111, 112]);
4293  console.log("RpcClient: writeIntArray is " + result);
4294  ```
4295
4296### readIntArray
4297
4298readIntArray(dataIn: number[]): void
4299
4300从MessageParcel实例中读取整数数组。
4301
4302**系统能力**:SystemCapability.Communication.IPC.Core
4303
4304**参数:**
4305
4306  | 参数名 | 类型     | 必填 | 说明               |
4307  | ------ | -------- | ---- | ------------------ |
4308  | dataIn | number[] | 是   | 要读取的整数数组。 |
4309
4310**示例:**
4311
4312  ```ts
4313  let data = rpc.MessageParcel.create();
4314  let result = data.writeIntArray([100, 111, 112]);
4315  console.log("RpcClient: writeIntArray is " + result);
4316  let array = new Array(3);
4317  data.readIntArray(array);
4318  ```
4319
4320### readIntArray
4321
4322readIntArray(): number[]
4323
4324从MessageParcel实例中读取整数数组。
4325
4326**系统能力**:SystemCapability.Communication.IPC.Core
4327
4328**返回值:**
4329
4330  | 类型     | 说明           |
4331  | -------- | -------------- |
4332  | number[] | 返回整数数组。 |
4333
4334**示例:**
4335
4336  ```ts
4337  let data = rpc.MessageParcel.create();
4338  let result = data.writeIntArray([100, 111, 112]);
4339  console.log("RpcClient: writeIntArray is " + result);
4340  let array = data.readIntArray();
4341  console.log("RpcClient: readIntArray is " + array);
4342  ```
4343
4344### writeLongArray
4345
4346writeLongArray(longArray: number[]): boolean
4347
4348将长整数数组写入MessageParcel实例。
4349
4350**系统能力**:SystemCapability.Communication.IPC.Core
4351
4352**参数:**
4353
4354  | 参数名    | 类型     | 必填 | 说明                 |
4355  | --------- | -------- | ---- | -------------------- |
4356  | longArray | number[] | 是   | 要写入的长整数数组。 |
4357
4358**返回值:**
4359
4360  | 类型    | 说明                          |
4361  | ------- | ----------------------------- |
4362  | boolean | true:写入成功,false:写入失败。|
4363
4364**示例:**
4365
4366  ```ts
4367  let data = rpc.MessageParcel.create();
4368  let result = data.writeLongArray([1111, 1112, 1113]);
4369  console.log("RpcClient: writeLongArray is " + result);
4370  ```
4371
4372### readLongArray
4373
4374readLongArray(dataIn: number[]): void
4375
4376从MessageParcel实例读取长整数数组。
4377
4378**系统能力**:SystemCapability.Communication.IPC.Core
4379
4380**参数:**
4381
4382  | 参数名 | 类型     | 必填 | 说明                 |
4383  | ------ | -------- | ---- | -------------------- |
4384  | dataIn | number[] | 是   | 要读取的长整数数组。 |
4385
4386**示例:**
4387
4388  ```ts
4389  let data = rpc.MessageParcel.create();
4390  let result = data.writeLongArray([1111, 1112, 1113]);
4391  console.log("RpcClient: writeLongArray is " + result);
4392  let array = new Array(3);
4393  data.readLongArray(array);
4394  ```
4395
4396### readLongArray
4397
4398readLongArray(): number[]
4399
4400从MessageParcel实例中读取长整数数组。
4401
4402**系统能力**:SystemCapability.Communication.IPC.Core
4403
4404**返回值:**
4405
4406 | 类型     | 说明             |
4407 | -------- | ---------------- |
4408 | number[] | 返回长整数数组。 |
4409
4410**示例:**
4411
4412  ```ts
4413  let data = rpc.MessageParcel.create();
4414  let result = data.writeLongArray([1111, 1112, 1113]);
4415  console.log("RpcClient: writeLongArray is " + result);
4416  let array = data.readLongArray();
4417  console.log("RpcClient: readLongArray is " + array);
4418  ```
4419
4420### writeFloatArray
4421
4422writeFloatArray(floatArray: number[]): boolean
4423
4424将浮点数组写入MessageParcel实例。
4425
4426**系统能力**:SystemCapability.Communication.IPC.Core
4427
4428**参数:**
4429
4430  | 参数名 | 类型 | 必填 | 说明  |
4431  | ---------- | -------- | ---- | --- |
4432  | floatArray | number[] | 是   | 要写入的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |
4433
4434**返回值:**
4435
4436  | 类型    | 说明                             |
4437  | ------- | -------------------------------- |
4438  | boolean | true:写入成功,false:写入失败。|
4439
4440**示例:**
4441
4442  ```ts
4443  let data = rpc.MessageParcel.create();
4444  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
4445  console.log("RpcClient: writeFloatArray is " + result);
4446  ```
4447
4448### readFloatArray
4449
4450readFloatArray(dataIn: number[]): void
4451
4452从MessageParcel实例中读取浮点数组。
4453
4454**系统能力**:SystemCapability.Communication.IPC.Core
4455
4456**参数:**
4457
4458  | 参数名 | 类型     | 必填 | 说明   |
4459  | ------ | -------- | ---- | ------ |
4460  | dataIn | number[] | 是   | 要读取的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |
4461
4462**示例:**
4463
4464  ```ts
4465  let data = rpc.MessageParcel.create();
4466  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
4467  console.log("RpcClient: writeFloatArray is " + result);
4468  let array = new Array(3);
4469  data.readFloatArray(array);
4470  ```
4471
4472### readFloatArray
4473
4474readFloatArray(): number[]
4475
4476从MessageParcel实例中读取浮点数组。
4477
4478**系统能力**:SystemCapability.Communication.IPC.Core
4479
4480**返回值:**
4481
4482  | 类型     | 说明           |
4483  | -------- | -------------- |
4484  | number[] | 返回浮点数组。 |
4485
4486**示例:**
4487
4488  ```ts
4489  let data = rpc.MessageParcel.create();
4490  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
4491  console.log("RpcClient: writeFloatArray is " + result);
4492  let array = data.readFloatArray();
4493  console.log("RpcClient: readFloatArray is " + array);
4494  ```
4495
4496### writeDoubleArray
4497
4498writeDoubleArray(doubleArray: number[]): boolean
4499
4500将双精度浮点数组写入MessageParcel实例。
4501
4502**系统能力**:SystemCapability.Communication.IPC.Core
4503
4504**参数:**
4505
4506  | 参数名      | 类型     | 必填 | 说明                     |
4507  | ----------- | -------- | ---- | ------------------------ |
4508  | doubleArray | number[] | 是   | 要写入的双精度浮点数组。 |
4509
4510**返回值:**
4511
4512  | 类型    | 说明                             |
4513  | ------- | -------------------------------- |
4514  | boolean | true:写入成功,false:写入失败。|
4515
4516**示例:**
4517
4518  ```ts
4519  let data = rpc.MessageParcel.create();
4520  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
4521  console.log("RpcClient: writeDoubleArray is " + result);
4522  ```
4523
4524### readDoubleArray
4525
4526readDoubleArray(dataIn: number[]): void
4527
4528从MessageParcel实例中读取双精度浮点数组。
4529
4530**系统能力**:SystemCapability.Communication.IPC.Core
4531
4532**参数:**
4533
4534  | 参数名 | 类型     | 必填 | 说明                     |
4535  | ------ | -------- | ---- | ------------------------ |
4536  | dataIn | number[] | 是   | 要读取的双精度浮点数组。 |
4537
4538**示例:**
4539
4540  ```ts
4541  let data = rpc.MessageParcel.create();
4542  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
4543  console.log("RpcClient: writeDoubleArray is " + result);
4544  let array = new Array(3);
4545  data.readDoubleArray(array);
4546  ```
4547
4548### readDoubleArray
4549
4550readDoubleArray(): number[]
4551
4552从MessageParcel实例读取双精度浮点数组。
4553
4554**系统能力**:SystemCapability.Communication.IPC.Core
4555
4556**返回值:**
4557
4558  | 类型     | 说明                 |
4559  | -------- | -------------------- |
4560  | number[] | 返回双精度浮点数组。 |
4561
4562**示例:**
4563
4564  ```ts
4565  let data = rpc.MessageParcel.create();
4566  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
4567  console.log("RpcClient: writeDoubleArray is " + result);
4568  let array = data.readDoubleArray();
4569  console.log("RpcClient: readDoubleArray is " + array);
4570  ```
4571
4572### writeBooleanArray
4573
4574writeBooleanArray(booleanArray: boolean[]): boolean
4575
4576将布尔数组写入MessageParcel实例。
4577
4578**系统能力**:SystemCapability.Communication.IPC.Core
4579
4580**参数:**
4581
4582  | 参数名       | 类型      | 必填 | 说明               |
4583  | ------------ | --------- | ---- | ------------------ |
4584  | booleanArray | boolean[] | 是   | 要写入的布尔数组。 |
4585
4586**返回值:**
4587
4588  | 类型    | 说明                             |
4589  | ------- | -------------------------------- |
4590  | boolean | true:写入成功,false:写入失败。|
4591
4592**示例:**
4593
4594  ```ts
4595  let data = rpc.MessageParcel.create();
4596  let result = data.writeBooleanArray([false, true, false]);
4597  console.log("RpcClient: writeBooleanArray is " + result);
4598  ```
4599
4600### readBooleanArray
4601
4602readBooleanArray(dataIn: boolean[]): void
4603
4604从MessageParcel实例中读取布尔数组。
4605
4606**系统能力**:SystemCapability.Communication.IPC.Core
4607
4608**参数:**
4609
4610  | 参数名 | 类型      | 必填 | 说明               |
4611  | ------ | --------- | ---- | ------------------ |
4612  | dataIn | boolean[] | 是   | 要读取的布尔数组。 |
4613
4614**示例:**
4615
4616  ```ts
4617  let data = rpc.MessageParcel.create();
4618  let result = data.writeBooleanArray([false, true, false]);
4619  console.log("RpcClient: writeBooleanArray is " + result);
4620  let array = new Array(3);
4621  data.readBooleanArray(array);
4622  ```
4623
4624### readBooleanArray
4625
4626readBooleanArray(): boolean[]
4627
4628从MessageParcel实例中读取布尔数组。
4629
4630**系统能力**:SystemCapability.Communication.IPC.Core
4631
4632**返回值:**
4633
4634  | 类型      | 说明           |
4635  | --------- | -------------- |
4636  | boolean[] | 返回布尔数组。 |
4637
4638**示例:**
4639
4640  ```ts
4641  let data = rpc.MessageParcel.create();
4642  let result = data.writeBooleanArray([false, true, false]);
4643  console.log("RpcClient: writeBooleanArray is " + result);
4644  let array = data.readBooleanArray();
4645  console.log("RpcClient: readBooleanArray is " + array);
4646  ```
4647
4648### writeCharArray
4649
4650writeCharArray(charArray: number[]): boolean
4651
4652将单个字符数组写入MessageParcel实例。
4653
4654**系统能力**:SystemCapability.Communication.IPC.Core
4655
4656**参数:**
4657
4658  | 参数名    | 类型     | 必填 | 说明                   |
4659  | --------- | -------- | ---- | ---------------------- |
4660  | charArray | number[] | 是   | 要写入的单个字符数组。 |
4661
4662**返回值:**
4663
4664  | 类型    | 说明                             |
4665  | ------- | -------------------------------- |
4666  | boolean | true:写入成功,false:写入失败。|
4667
4668**示例:**
4669
4670  ```ts
4671  let data = rpc.MessageParcel.create();
4672  let result = data.writeCharArray([97, 98, 88]);
4673  console.log("RpcClient: writeCharArray is " + result);
4674  ```
4675
4676### readCharArray
4677
4678readCharArray(dataIn: number[]): void
4679
4680从MessageParcel实例中读取单个字符数组。
4681
4682**系统能力**:SystemCapability.Communication.IPC.Core
4683
4684**参数:**
4685
4686  | 参数名 | 类型     | 必填 | 说明                   |
4687  | ------ | -------- | ---- | ---------------------- |
4688  | dataIn | number[] | 是   | 要读取的单个字符数组。 |
4689
4690**示例:**
4691
4692  ```ts
4693  let data = rpc.MessageParcel.create();
4694  let result = data.writeCharArray([97, 98, 99]);
4695  console.log("RpcClient: writeCharArray is " + result);
4696  let array = new Array(3);
4697  data.readCharArray(array);
4698  ```
4699
4700### readCharArray
4701
4702readCharArray(): number[]
4703
4704从MessageParcel实例读取单个字符数组。
4705
4706**系统能力**:SystemCapability.Communication.IPC.Core
4707
4708**返回值:**
4709
4710  | 类型     | 说明               |
4711  | -------- | ------------------ |
4712  | number[] | 返回单个字符数组。 |
4713
4714**示例:**
4715
4716  ```ts
4717  let data = rpc.MessageParcel.create();
4718  let result = data.writeCharArray([97, 98, 99]);
4719  console.log("RpcClient: writeCharArray is " + result);
4720  let array = data.readCharArray();
4721  console.log("RpcClient: readCharArray is " + array);
4722  ```
4723
4724### writeStringArray
4725
4726writeStringArray(stringArray: string[]): boolean
4727
4728将字符串数组写入MessageParcel实例。
4729
4730**系统能力**:SystemCapability.Communication.IPC.Core
4731
4732**参数:**
4733
4734  | 参数名      | 类型     | 必填 | 说明             |
4735  | ----------- | -------- | ---- | ---------------- |
4736  | stringArray | string[] | 是   | 要写入的字符串数组,数组单个元素的长度应小于40960字节。 |
4737
4738**返回值:**
4739
4740  | 类型    | 说明 |
4741  | ------- | -------------------------------- |
4742  | boolean | true:写入成功,false:写入失败。|
4743
4744**示例:**
4745
4746  ```ts
4747  let data = rpc.MessageParcel.create();
4748  let result = data.writeStringArray(["abc", "def"]);
4749  console.log("RpcClient: writeStringArray is " + result);
4750  ```
4751
4752### readStringArray
4753
4754readStringArray(dataIn: string[]): void
4755
4756从MessageParcel实例读取字符串数组。
4757
4758**系统能力**:SystemCapability.Communication.IPC.Core
4759
4760**参数:**
4761
4762  | 参数名 | 类型     | 必填 | 说明                 |
4763  | ------ | -------- | ---- | -------------------- |
4764  | dataIn | string[] | 是   | 要读取的字符串数组。 |
4765
4766**示例:**
4767
4768  ```ts
4769  let data = rpc.MessageParcel.create();
4770  let result = data.writeStringArray(["abc", "def"]);
4771  console.log("RpcClient: writeStringArray is " + result);
4772  let array = new Array(2);
4773  data.readStringArray(array);
4774  ```
4775
4776### readStringArray
4777
4778readStringArray(): string[]
4779
4780从MessageParcel实例读取字符串数组。
4781
4782**系统能力**:SystemCapability.Communication.IPC.Core
4783
4784**返回值:**
4785
4786  | 类型     | 说明             |
4787  | -------- | ---------------- |
4788  | string[] | 返回字符串数组。 |
4789
4790**示例:**
4791
4792  ```ts
4793  let data = rpc.MessageParcel.create();
4794  let result = data.writeStringArray(["abc", "def"]);
4795  console.log("RpcClient: writeStringArray is " + result);
4796  let array = data.readStringArray();
4797  console.log("RpcClient: readStringArray is " + array);
4798  ```
4799
4800### writeNoException<sup>8+</sup>
4801
4802writeNoException(): void
4803
4804向MessageParcel写入“指示未发生异常”的信息。
4805
4806**系统能力**:SystemCapability.Communication.IPC.Core
4807
4808**示例:**
4809
4810  ```ts
4811  class MyDeathRecipient {
4812      onRemoteDied() {
4813          console.log("server died");
4814      }
4815  }
4816  class TestRemoteObject extends rpc.RemoteObject {
4817      constructor(descriptor) {
4818          super(descriptor);
4819      }
4820      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
4821          return true;
4822      }
4823      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
4824          return true;
4825      }
4826      isObjectDead(): boolean {
4827          return false;
4828      }
4829      onRemoteRequest(code, data, reply, option) {
4830          if (code === 1) {
4831              console.log("RpcServer: onRemoteRequest called");
4832              reply.writeNoException();
4833              return true;
4834          } else {
4835              console.log("RpcServer: unknown code: " + code);
4836              return false;
4837          }
4838      }
4839  }
4840  ```
4841
4842### readException<sup>8+</sup>
4843
4844readException(): void
4845
4846从MessageParcel中读取异常。
4847
4848**系统能力**:SystemCapability.Communication.IPC.Core
4849
4850**示例:**
4851
4852  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
4853
4854  ```ts
4855  // 仅FA模型需要导入@ohos.ability.featureAbility
4856  // import FA from "@ohos.ability.featureAbility";
4857
4858  let proxy;
4859  let connect = {
4860      onConnect: function(elementName, remoteProxy) {
4861          console.log("RpcClient: js onConnect called.");
4862          proxy = remoteProxy;
4863      },
4864      onDisconnect: function(elementName) {
4865          console.log("RpcClient: onDisconnect");
4866      },
4867      onFailed: function() {
4868          console.log("RpcClient: onFailed");
4869      }
4870  };
4871  let want = {
4872      "bundleName": "com.ohos.server",
4873      "abilityName": "com.ohos.server.EntryAbility",
4874  };
4875
4876  // FA模型使用此方法连接服务
4877  // FA.connectAbility(want,connect);
4878
4879  globalThis.context.connectServiceExtensionAbility(want, connect);
4880  ```
4881
4882  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息
4883
4884  ```ts
4885  let option = new rpc.MessageOption();
4886  let data = rpc.MessageParcel.create();
4887  let reply = rpc.MessageParcel.create();
4888  data.writeInt(1);
4889  data.writeString("hello");
4890  proxy.sendMessageRequest(1, data, reply, option)
4891      .then(function(errCode) {
4892          if (errCode === 0) {
4893              console.log("sendMessageRequest got result");
4894              reply.readException();
4895              let msg = reply.readString();
4896              console.log("RPCTest: reply msg: " + msg);
4897          } else {
4898              console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode);
4899          }
4900      }).catch(function(e) {
4901          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
4902      }).finally (() => {
4903          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
4904          data.reclaim();
4905          reply.reclaim();
4906      });
4907  ```
4908
4909### writeSequenceableArray
4910
4911writeSequenceableArray(sequenceableArray: Sequenceable[]): boolean
4912
4913将可序列化对象数组写入MessageParcel实例。
4914
4915**系统能力**:SystemCapability.Communication.IPC.Core
4916
4917**参数:**
4918
4919  | 参数名            | 类型           | 必填 | 说明                       |
4920  | ----------------- | -------------- | ---- | -------------------------- |
4921  | sequenceableArray | Sequenceable[] | 是   | 要写入的可序列化对象数组。 |
4922
4923**返回值:**
4924
4925  | 类型    | 说明                             |
4926  | ------- | -------------------------------- |
4927  | boolean | true:写入成功,false:写入失败。|
4928
4929**示例:**
4930
4931  ```ts
4932  class MySequenceable {
4933      num: number;
4934      str: string;
4935      constructor(num, str) {
4936          this.num = num;
4937          this.str = str;
4938      }
4939      marshalling(messageParcel) {
4940          messageParcel.writeInt(this.num);
4941          messageParcel.writeString(this.str);
4942          return true;
4943      }
4944      unmarshalling(messageParcel) {
4945          this.num = messageParcel.readInt();
4946          this.str = messageParcel.readString();
4947          return true;
4948      }
4949  }
4950  let sequenceable = new MySequenceable(1, "aaa");
4951  let sequenceable2 = new MySequenceable(2, "bbb");
4952  let sequenceable3 = new MySequenceable(3, "ccc");
4953  let a = [sequenceable, sequenceable2, sequenceable3];
4954  let data = rpc.MessageParcel.create();
4955  let result = data.writeSequenceableArray(a);
4956  console.log("RpcClient: writeSequenceableArray is " + result);
4957  ```
4958
4959### readSequenceableArray<sup>8+</sup>
4960
4961readSequenceableArray(sequenceableArray: Sequenceable[]): void
4962
4963从MessageParcel实例读取可序列化对象数组。
4964
4965**系统能力**:SystemCapability.Communication.IPC.Core
4966
4967**参数:**
4968
4969  | 参数名            | 类型           | 必填 | 说明                       |
4970  | ----------------- | -------------- | ---- | -------------------------- |
4971  | sequenceableArray | Sequenceable[] | 是   | 要读取的可序列化对象数组。 |
4972
4973**示例:**
4974
4975  ```ts
4976  class MySequenceable {
4977      num: number;
4978      str: string;
4979      constructor(num, str) {
4980          this.num = num;
4981          this.str = str;
4982      }
4983      marshalling(messageParcel) {
4984          messageParcel.writeInt(this.num);
4985          messageParcel.writeString(this.str);
4986          return true;
4987      }
4988      unmarshalling(messageParcel) {
4989          this.num = messageParcel.readInt();
4990          this.str = messageParcel.readString();
4991          return true;
4992      }
4993  }
4994  let sequenceable = new MySequenceable(1, "aaa");
4995  let sequenceable2 = new MySequenceable(2, "bbb");
4996  let sequenceable3 = new MySequenceable(3, "ccc");
4997  let a = [sequenceable, sequenceable2, sequenceable3];
4998  let data = rpc.MessageParcel.create();
4999  let result = data.writeSequenceableArray(a);
5000  console.log("RpcClient: writeSequenceableArray is " + result);
5001  let b = [new MySequenceable(0, ""), new MySequenceable(0, ""), new MySequenceable(0, "")];
5002  data.readSequenceableArray(b);
5003  ```
5004
5005### writeRemoteObjectArray<sup>8+</sup>
5006
5007writeRemoteObjectArray(objectArray: IRemoteObject[]): boolean
5008
5009将IRemoteObject对象数组写入MessageParcel。
5010
5011**系统能力**:SystemCapability.Communication.IPC.Core
5012
5013**参数:**
5014
5015  | 参数名      | 类型            | 必填 | 说明  |
5016  | ----------- | --------------- | ---- | ----- |
5017  | objectArray | IRemoteObject[] | 是   | 要写入MessageParcel的IRemoteObject对象数组。 |
5018
5019**返回值:**
5020
5021  | 类型    | 说明                                                                                                                 |
5022  | ------- | -------------------------------- |
5023  | boolean | true:写入成功,false:写入失败。|
5024
5025**示例:**
5026
5027  ```ts
5028  class MyDeathRecipient {
5029      onRemoteDied() {
5030          console.log("server died");
5031      }
5032  }
5033  class TestRemoteObject extends rpc.RemoteObject {
5034      constructor(descriptor) {
5035          super(descriptor);
5036          this.attachLocalInterface(this, descriptor);
5037      }
5038      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5039          return true;
5040      }
5041      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5042          return true;
5043      }
5044      isObjectDead(): boolean {
5045          return false;
5046      }
5047      asObject(): rpc.IRemoteObject {
5048          return this;
5049      }
5050  }
5051  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
5052  let data = rpc.MessageParcel.create();
5053  let result = data.writeRemoteObjectArray(a);
5054  console.log("RpcClient: writeRemoteObjectArray is " + result);
5055  ```
5056
5057### readRemoteObjectArray<sup>8+</sup>
5058
5059readRemoteObjectArray(objects: IRemoteObject[]): void
5060
5061从MessageParcel读取IRemoteObject对象数组。
5062
5063**系统能力**:SystemCapability.Communication.IPC.Core
5064
5065**参数:**
5066
5067  | 参数名  | 类型            | 必填 | 说明      |
5068  | ------- | --------------- | ---- | --------- |
5069  | objects | IRemoteObject[] | 是   | 从MessageParcel读取的IRemoteObject对象数组。 |
5070
5071**示例:**
5072
5073  ```ts
5074  class MyDeathRecipient {
5075      onRemoteDied() {
5076          console.log("server died");
5077      }
5078  }
5079  class TestRemoteObject extends rpc.RemoteObject {
5080      constructor(descriptor) {
5081          super(descriptor);
5082          this.attachLocalInterface(this, descriptor);
5083      }
5084      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5085          return true;
5086      }
5087      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5088          return true;
5089      }
5090      isObjectDead(): boolean {
5091         return false;
5092      }
5093      asObject(): rpc.IRemoteObject {
5094          return this;
5095      }
5096  }
5097  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
5098  let data = rpc.MessageParcel.create();
5099  let result = data.writeRemoteObjectArray(a);
5100  let b = new Array(3);
5101  data.readRemoteObjectArray(b);
5102  ```
5103
5104### readRemoteObjectArray<sup>8+</sup>
5105
5106readRemoteObjectArray(): IRemoteObject[]
5107
5108从MessageParcel读取IRemoteObject对象数组。
5109
5110**系统能力**:SystemCapability.Communication.IPC.Core
5111
5112**返回值:**
5113
5114  | 类型            | 说明                        |
5115  | --------------- | --------------------------- |
5116  | IRemoteObject[] | 返回IRemoteObject对象数组。 |
5117
5118**示例:**
5119
5120  ```ts
5121  class MyDeathRecipient {
5122      onRemoteDied() {
5123          console.log("server died");
5124      }
5125  }
5126  class TestRemoteObject extends rpc.RemoteObject {
5127      constructor(descriptor) {
5128          super(descriptor);
5129          this.attachLocalInterface(this, descriptor);
5130      }
5131      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5132          return true;
5133      }
5134      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5135          return true;
5136      }
5137      isObjectDead(): boolean {
5138          return false;
5139      }
5140      asObject(): rpc.IRemoteObject {
5141          return this;
5142      }
5143  }
5144  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
5145  let data = rpc.MessageParcel.create();
5146  let result = data.writeRemoteObjectArray(a);
5147  console.log("RpcClient: readRemoteObjectArray is " + result);
5148  let b = data.readRemoteObjectArray();
5149  console.log("RpcClient: readRemoteObjectArray is " + b);
5150  ```
5151
5152### closeFileDescriptor<sup>8+</sup>
5153
5154static closeFileDescriptor(fd: number): void
5155
5156静态方法,关闭给定的文件描述符。
5157
5158**系统能力**:SystemCapability.Communication.IPC.Core
5159
5160**参数:**
5161
5162  | 参数名 | 类型   | 必填 | 说明                 |
5163  | ------ | ------ | ---- | -------------------- |
5164  | fd     | number | 是   | 要关闭的文件描述符。 |
5165
5166**示例:**
5167
5168  ```ts
5169  import fs from '@ohos.file.fs';
5170  let filePath = "path/to/file";
5171  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
5172  rpc.MessageParcel.closeFileDescriptor(file.fd);
5173  ```
5174
5175### dupFileDescriptor<sup>8+</sup>
5176
5177static dupFileDescriptor(fd: number) :number
5178
5179静态方法,复制给定的文件描述符。
5180
5181**系统能力**:SystemCapability.Communication.IPC.Core
5182
5183**参数:**
5184
5185  | 参数名 | 类型   | 必填 | 说明                     |
5186  | ------ | ------ | ---- | ------------------------ |
5187  | fd     | number | 是   | 表示已存在的文件描述符。 |
5188
5189**返回值:**
5190
5191  | 类型   | 说明                 |
5192  | ------ | -------------------- |
5193  | number | 返回新的文件描述符。 |
5194
5195**示例:**
5196
5197  ```ts
5198  import fs from '@ohos.file.fs';
5199  let filePath = "path/to/file";
5200  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
5201  let newFd = rpc.MessageParcel.dupFileDescriptor(file.fd);
5202  ```
5203
5204### containFileDescriptors<sup>8+</sup>
5205
5206containFileDescriptors(): boolean
5207
5208检查此MessageParcel对象是否包含文件描述符。
5209
5210**系统能力**:SystemCapability.Communication.IPC.Core
5211
5212**返回值:**
5213
5214  | 类型    | 说明                                          |
5215  | ------- | --------------------------------------------- |
5216  | boolean |true:包含文件描述符,false:未包含文件描述符。|
5217
5218**示例:**
5219
5220  ```ts
5221  import fs from '@ohos.file.fs';
5222  let parcel = new rpc.MessageParcel();
5223  let filePath = "path/to/file";
5224  let r1 = parcel.containFileDescriptors();
5225  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
5226  let writeResult = parcel.writeFileDescriptor(file.fd);
5227  console.log("RpcTest: parcel writeFd result is : " + writeResult);
5228  let containFD = parcel.containFileDescriptors();
5229  console.log("RpcTest: parcel after write fd containFd result is : " + containFD);
5230  ```
5231
5232### writeFileDescriptor<sup>8+</sup>
5233
5234writeFileDescriptor(fd: number): boolean
5235
5236写入文件描述符到MessageParcel。
5237
5238**系统能力**:SystemCapability.Communication.IPC.Core
5239
5240**参数:**
5241
5242  | 参数名 | 类型   | 必填 | 说明         |
5243  | ------ | ------ | ---- | ------------ |
5244  | fd     | number | 是   | 文件描述符。 |
5245
5246**返回值:**
5247
5248  | 类型    | 说明                             |
5249  | ------- | -------------------------------- |
5250  | boolean | true:操作成功,false:操作失败。|
5251
5252**示例:**
5253
5254  ```ts
5255  import fs from '@ohos.file.fs';
5256  let parcel = new rpc.MessageParcel();
5257  let filePath = "path/to/file";
5258  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
5259  let writeResult = parcel.writeFileDescriptor(file.fd);
5260  console.log("RpcTest: parcel writeFd result is : " + writeResult);
5261  ```
5262
5263### readFileDescriptor<sup>8+</sup>
5264
5265readFileDescriptor(): number
5266
5267从MessageParcel中读取文件描述符。
5268
5269**系统能力**:SystemCapability.Communication.IPC.Core
5270
5271**返回值:**
5272
5273  | 类型   | 说明             |
5274  | ------ | ---------------- |
5275  | number | 返回文件描述符。 |
5276
5277**示例:**
5278
5279  ```ts
5280  import fs from '@ohos.file.fs';
5281  let parcel = new rpc.MessageParcel();
5282  let filePath = "path/to/file";
5283  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
5284  let writeResult = parcel.writeFileDescriptor(file.fd);
5285  let readFD = parcel.readFileDescriptor();
5286  console.log("RpcTest: parcel read fd is : " + readFD);
5287  ```
5288
5289### writeAshmem<sup>8+</sup>
5290
5291writeAshmem(ashmem: Ashmem): boolean
5292
5293将指定的匿名共享对象写入此MessageParcel。
5294
5295**系统能力**:SystemCapability.Communication.IPC.Core
5296
5297**参数:**
5298
5299  | 参数名 | 类型   | 必填 | 说明                                |
5300  | ------ | ------ | ---- | ----------------------------------- |
5301  | ashmem | Ashmem | 是   | 要写入MessageParcel的匿名共享对象。 |
5302
5303**返回值:**
5304
5305  | 类型    | 说明                             |
5306  | ------- | -------------------------------- |
5307  | boolean | true:写入成功,false:写入失败。|
5308
5309**示例:**
5310
5311  ```ts
5312  let parcel = new rpc.MessageParcel();
5313  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
5314  let isWriteSuccess = parcel.writeAshmem(ashmem);
5315  console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
5316  ```
5317
5318### readAshmem<sup>8+</sup>
5319
5320readAshmem(): Ashmem
5321
5322从MessageParcel读取匿名共享对象。
5323
5324**系统能力**:SystemCapability.Communication.IPC.Core
5325
5326**返回值:**
5327
5328  | 类型   | 说明               |
5329  | ------ | ------------------ |
5330  | Ashmem | 返回匿名共享对象。 |
5331
5332**示例:**
5333
5334  ```ts
5335  let parcel = new rpc.MessageParcel();
5336  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
5337  let isWriteSuccess = parcel.writeAshmem(ashmem);
5338  console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
5339  let readAshmem = parcel.readAshmem();
5340  console.log("RpcTest: read ashmem to result is : " + readAshmem);
5341  ```
5342
5343### getRawDataCapacity<sup>8+</sup>
5344
5345getRawDataCapacity(): number
5346
5347获取MessageParcel可以容纳的最大原始数据量。
5348
5349**系统能力**:SystemCapability.Communication.IPC.Core
5350
5351**返回值:**
5352
5353  | 类型   | 说明                                                       |
5354  | ------ | ---------------------------------------------------------- |
5355  | number | 返回MessageParcel可以容纳的最大原始数据量,即128&nbsp;Mb。 |
5356
5357**示例:**
5358
5359  ```ts
5360  let parcel = new rpc.MessageParcel();
5361  let result = parcel.getRawDataCapacity();
5362  console.log("RpcTest: parcel get RawDataCapacity result is : " + result);
5363  ```
5364
5365### writeRawData<sup>8+</sup>
5366
5367writeRawData(rawData: number[], size: number): boolean
5368
5369将原始数据写入MessageParcel对象。
5370
5371**系统能力**:SystemCapability.Communication.IPC.Core
5372
5373**参数:**
5374
5375  | 参数名  | 类型     | 必填 | 说明                               |
5376  | ------- | -------- | ---- | ---------------------------------- |
5377  | rawData | number[] | 是   | 要写入的原始数据。                 |
5378  | size    | number   | 是   | 发送的原始数据大小,以字节为单位。 |
5379
5380**返回值:**
5381
5382  | 类型    | 说明                             |
5383  | ------- | -------------------------------- |
5384  | boolean | true:写入成功,false:写入失败。|
5385
5386**示例:**
5387
5388  ```ts
5389  let parcel = new rpc.MessageParcel();
5390  let arr = [1, 2, 3, 4, 5];
5391  let isWriteSuccess = parcel.writeRawData(arr, arr.length);
5392  console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
5393  ```
5394
5395### readRawData<sup>8+</sup>
5396
5397readRawData(size: number): number[]
5398
5399从MessageParcel读取原始数据。
5400
5401**系统能力**:SystemCapability.Communication.IPC.Core
5402
5403**参数:**
5404
5405  | 参数名 | 类型   | 必填 | 说明                     |
5406  | ------ | ------ | ---- | ------------------------ |
5407  | size   | number | 是   | 要读取的原始数据的大小。 |
5408
5409**返回值:**
5410
5411  | 类型     | 说明                           |
5412  | -------- | ------------------------------ |
5413  | number[] | 返回原始数据(以字节为单位)。 |
5414
5415**示例:**
5416
5417  ```ts
5418  let parcel = new rpc.MessageParcel();
5419  let arr = [1, 2, 3, 4, 5];
5420  let isWriteSuccess = parcel.writeRawData(arr, arr.length);
5421  console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
5422  let result = parcel.readRawData(5);
5423  console.log("RpcTest: parcel read raw data result is : " + result);
5424  ```
5425
5426## Parcelable<sup>9+</sup>
5427
5428在进程间通信(IPC)期间,将类的对象写入MessageSequence并从MessageSequence中恢复它们。
5429
5430### marshalling
5431
5432marshalling(dataOut: MessageSequence): boolean
5433
5434将此可序列对象封送到MessageSequence中。
5435
5436**系统能力**:SystemCapability.Communication.IPC.Core
5437
5438**参数:**
5439
5440  | 参数名  | 类型            | 必填 | 说明                                        |
5441  | ------- | --------------- | ---- | ------------------------------------------- |
5442  | dataOut | MessageSequence | 是   | 可序列对象将被封送到的MessageSequence对象。 |
5443
5444**返回值:**
5445
5446  | 类型    | 说明                             |
5447  | ------- | -------------------------------- |
5448  | boolean | true:封送成功,false:封送失败。|
5449
5450**示例:**
5451
5452  ```ts
5453  class MyParcelable {
5454      num: number;
5455      str: string;
5456      constructor(num, str) {
5457          this.num = num;
5458          this.str = str;
5459      }
5460      marshalling(messageSequence) {
5461          messageSequence.writeInt(this.num);
5462          messageSequence.writeString(this.str);
5463          return true;
5464      }
5465      unmarshalling(messageSequence) {
5466          this.num = messageSequence.readInt();
5467          this.str = messageSequence.readString();
5468          return true;
5469      }
5470  }
5471  let parcelable = new MyParcelable(1, "aaa");
5472  let data = rpc.MessageSequence.create();
5473  let result = data.writeParcelable(parcelable);
5474  console.log("RpcClient: writeParcelable is " + result);
5475  let ret = new MyParcelable(0, "");
5476  let result2 = data.readParcelable(ret);
5477  console.log("RpcClient: readParcelable is " + result2);
5478  ```
5479
5480### unmarshalling
5481
5482unmarshalling(dataIn: MessageSequence): boolean
5483
5484从MessageSequence中解封此可序列对象。
5485
5486**系统能力**:SystemCapability.Communication.IPC.Core
5487
5488**参数:**
5489
5490  | 参数名 | 类型            | 必填 | 说明                                            |
5491  | ------ | --------------- | ---- | ----------------------------------------------- |
5492  | dataIn | MessageSequence | 是   | 已将可序列对象封送到其中的MessageSequence对象。 |
5493
5494**返回值:**
5495
5496  | 类型    | 说明                                     |
5497  | ------- | ---------------------------------------- |
5498  | boolean | true:反序列化成功,false:反序列化失败。|
5499
5500**示例:**
5501
5502  ```ts
5503  class MyParcelable {
5504      num: number;
5505      str: string;
5506      constructor(num, str) {
5507          this.num = num;
5508          this.str = str;
5509      }
5510      marshalling(messageSequence) {
5511          messageSequence.writeInt(this.num);
5512          messageSequence.writeString(this.str);
5513          return true;
5514      }
5515      unmarshalling(messageSequence) {
5516          this.num = messageSequence.readInt();
5517          this.str = messageSequence.readString();
5518          return true;
5519      }
5520  }
5521  let parcelable = new MyParcelable(1, "aaa");
5522  let data = rpc.MessageSequence.create();
5523  let result = data.writeParcelable(parcelable);
5524  console.log("RpcClient: writeParcelable is " + result);
5525  let ret = new MyParcelable(0, "");
5526  let result2 = data.readParcelable(ret);
5527  console.log("RpcClient: readParcelable is " + result2);
5528  ```
5529
5530## Sequenceable<sup>(deprecated)</sup>
5531
5532>从API version 9 开始不再维护,建议使用[Parcelable](#parcelable9)类替代。
5533
5534在进程间通信(IPC)期间,将类的对象写入MessageParcel并从MessageParcel中恢复它们。
5535
5536### marshalling
5537
5538marshalling(dataOut: MessageParcel): boolean
5539
5540将此可序列对象封送到MessageParcel中。
5541
5542**系统能力**:SystemCapability.Communication.IPC.Core
5543
5544**参数:**
5545
5546  | 参数名  | 类型                                      | 必填 | 说明                                      |
5547  | ------- | ----------------------------------------- | ---- | ----------------------------------------- |
5548  | dataOut | [MessageParcel](#messageparceldeprecated) | 是   | 可序列对象将被封送到的MessageParcel对象。 |
5549
5550**返回值:**
5551
5552  | 类型    | 说明                              |
5553  | ------- | --------------------------------  |
5554  | boolean | true:封送成功,false:封送失败。 |
5555
5556**示例:**
5557
5558  ```ts
5559  class MySequenceable {
5560      num: number;
5561      str: string;
5562      constructor(num, str) {
5563          this.num = num;
5564          this.str = str;
5565      }
5566      marshalling(messageParcel) {
5567          messageParcel.writeInt(this.num);
5568          messageParcel.writeString(this.str);
5569          return true;
5570      }
5571      unmarshalling(messageParcel) {
5572          this.num = messageParcel.readInt();
5573          this.str = messageParcel.readString();
5574          return true;
5575      }
5576  }
5577  let sequenceable = new MySequenceable(1, "aaa");
5578  let data = rpc.MessageParcel.create();
5579  let result = data.writeSequenceable(sequenceable);
5580  console.log("RpcClient: writeSequenceable is " + result);
5581  let ret = new MySequenceable(0, "");
5582  let result2 = data.readSequenceable(ret);
5583  console.log("RpcClient: readSequenceable is " + result2);
5584  ```
5585
5586### unmarshalling
5587
5588unmarshalling(dataIn: MessageParcel): boolean
5589
5590从MessageParcel中解封此可序列对象。
5591
5592**系统能力**:SystemCapability.Communication.IPC.Core
5593
5594**参数:**
5595
5596  | 参数名 | 类型                                      | 必填 | 说明                                          |
5597  | ------ | ----------------------------------------- | ---- | --------------------------------------------- |
5598  | dataIn | [MessageParcel](#messageparceldeprecated) | 是   | 已将可序列对象封送到其中的MessageParcel对象。 |
5599
5600**返回值:**
5601
5602  | 类型    | 说明                                     |
5603  | ------- | ---------------------------------------- |
5604  | boolean | true:反序列化成功,false:反序列化失败。|
5605
5606**示例:**
5607
5608  ```ts
5609  class MySequenceable {
5610      num: number;
5611      str: string;
5612      constructor(num, str) {
5613          this.num = num;
5614          this.str = str;
5615      }
5616      marshalling(messageParcel) {
5617          messageParcel.writeInt(this.num);
5618          messageParcel.writeString(this.str);
5619          return true;
5620      }
5621      unmarshalling(messageParcel) {
5622          this.num = messageParcel.readInt();
5623          this.str = messageParcel.readString();
5624          return true;
5625      }
5626  }
5627  let sequenceable = new MySequenceable(1, "aaa");
5628  let data = rpc.MessageParcel.create();
5629  let result = data.writeSequenceable(sequenceable);
5630  console.log("RpcClient: writeSequenceable is " + result);
5631  let ret = new MySequenceable(0, "");
5632  let result2 = data.readSequenceable(ret);
5633  console.log("RpcClient: readSequenceable is " + result2);
5634  ```
5635
5636## IRemoteBroker
5637
5638远端对象的代理持有者。用于获取代理对象。
5639
5640### asObject
5641
5642asObject(): IRemoteObject
5643
5644需派生类实现,获取代理或远端对象。
5645
5646**系统能力**:SystemCapability.Communication.IPC.Core
5647
5648**返回值:**
5649
5650  | 类型  | 说明  |
5651  | ----- | ----- |
5652  | [IRemoteObject](#iremoteobject) | 如果调用者是RemoteObject对象,则直接返回本身;如果调用者是[RemoteProxy](#remoteproxy)对象,则返回它的持有者[IRemoteObject](#iremoteobject)。 |
5653
5654**示例:**
5655
5656  ```ts
5657  class TestAbility extends rpc.RemoteObject {
5658      asObject() {
5659          return this;
5660      }
5661  }
5662  let remoteObject = new TestAbility("testObject").asObject();
5663  ```
5664
5665**示例:**
5666
5667  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
5668
5669  ```ts
5670  // 仅FA模型需要导入@ohos.ability.featureAbility
5671  // import FA from "@ohos.ability.featureAbility";
5672
5673  let proxy;
5674  let connect = {
5675      onConnect: function(elementName, remoteProxy) {
5676          console.log("RpcClient: js onConnect called.");
5677          proxy = remoteProxy;
5678      },
5679      onDisconnect: function(elementName) {
5680          console.log("RpcClient: onDisconnect");
5681      },
5682      onFailed: function() {
5683          console.log("RpcClient: onFailed");
5684      }
5685  };
5686  let want = {
5687      "bundleName": "com.ohos.server",
5688      "abilityName": "com.ohos.server.EntryAbility",
5689  };
5690
5691  // FA模型使用此方法连接服务
5692  // FA.connectAbility(want,connect);
5693
5694  globalThis.context.connectServiceExtensionAbility(want, connect);
5695  ```
5696
5697  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的asObject接口方法获取代理或远端对象
5698
5699  ```ts
5700  class TestProxy {
5701      remote: rpc.RemoteObject;
5702      constructor(remote) {
5703          this.remote = remote;
5704      }
5705      asObject() {
5706          return this.remote;
5707      }
5708  }
5709  let iRemoteObject = new TestProxy(proxy).asObject();
5710  ```
5711
5712## DeathRecipient
5713
5714用于订阅远端对象的死亡通知。当被订阅该通知的远端对象死亡时,本端可收到消息,调用[onRemoteDied](#onremotedied)接口。远端对象死亡可以为远端对象所在进程死亡,远端对象所在设备关机或重启,当远端对象与本端对象属于不同设备时,也可为远端对象离开组网时。
5715
5716### onRemoteDied
5717
5718onRemoteDied(): void
5719
5720在成功添加死亡通知订阅后,当远端对象死亡时,将自动调用本方法。
5721
5722**系统能力**:SystemCapability.Communication.IPC.Core
5723
5724**示例:**
5725
5726  ```ts
5727  class MyDeathRecipient {
5728      onRemoteDied() {
5729          console.log("server died");
5730      }
5731  }
5732  ```
5733
5734## RequestResult<sup>9+</sup>
5735
5736发送请求的响应结果。
5737
5738**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core5739
5740  | 名称    | 类型            | 可读 | 可写 | 说明                                  |
5741  | ------- | --------------- | ---- | ---- |-------------------------------------- |
5742  | errCode | number          | 是   | 否   | 错误码。                              |
5743  | code    | number          | 是   | 否   | 消息代码。                            |
5744  | data    | MessageSequence | 是   | 否   | 发送给对端进程的MessageSequence对象。 |
5745  | reply   | MessageSequence | 是   | 否   | 对端进程返回的MessageSequence对象。   |
5746
5747## SendRequestResult<sup>8+(deprecated)</sup>
5748
5749>从API version 9 开始不再维护,建议使用[RequestResult](#requestresult9)类替代。
5750
5751发送请求的响应结果。
5752
5753**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core5754
5755  | 名称    | 类型          | 可读 | 可写 | 说明                                |
5756  | ------- | ------------- | ---- | ---- | ----------------------------------- |
5757  | errCode | number        | 是   | 否   | 错误码。                            |
5758  | code    | number        | 是   | 否   | 消息代码。                          |
5759  | data    | MessageParcel | 是   | 否   | 发送给对端进程的MessageParcel对象。 |
5760  | reply   | MessageParcel | 是   | 否   | 对端进程返回的MessageParcel对象。   |
5761
5762## IRemoteObject
5763
5764该接口可用于查询或获取接口描述符、添加或删除死亡通知、转储对象状态到特定文件、发送消息。
5765
5766### getLocalInterface<sup>9+</sup>
5767
5768getLocalInterface(descriptor: string): IRemoteBroker
5769
5770查询接口描述符的字符串。
5771
5772**系统能力**:SystemCapability.Communication.IPC.Core
5773
5774**参数:**
5775
5776  | 参数名     | 类型   | 必填 | 说明                 |
5777  | ---------- | ------ | ---- | -------------------- |
5778  | descriptor | string | 是   | 接口描述符的字符串。 |
5779
5780**返回值:**
5781
5782  | 类型          | 说明                                          |
5783  | ------------- | --------------------------------------------- |
5784  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
5785
5786### queryLocalInterface<sup>(deprecated)</sup>
5787
5788>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。
5789
5790queryLocalInterface(descriptor: string): IRemoteBroker
5791
5792查询接口描述符的字符串。
5793
5794**系统能力**:SystemCapability.Communication.IPC.Core
5795
5796**参数:**
5797
5798  | 参数名     | 类型   | 必填 | 说明                 |
5799  | ---------- | ------ | ---- | -------------------- |
5800  | descriptor | string | 是   | 接口描述符的字符串。 |
5801
5802**返回值:**
5803
5804  | 类型          | 说明                                          |
5805  | ------------- | --------------------------------------------- |
5806  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
5807
5808### sendRequest<sup>(deprecated)</sup>
5809
5810>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
5811
5812sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
5813
5814以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
5815
5816**系统能力**:SystemCapability.Communication.IPC.Core
5817
5818**参数:**
5819
5820  | 参数名  | 类型                                      | 必填 | 说明                                                                                   |
5821  | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
5822  | code    | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5823  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
5824  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
5825  | options | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5826
5827**返回值:**
5828
5829  | 类型    | 说明                             |
5830  | ------- | -------------------------------- |
5831  | boolean | true:发送成功,false:发送失败。|
5832
5833### sendRequest<sup>8+(deprecated)</sup>
5834
5835>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
5836
5837sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise&lt;SendRequestResult&gt;
5838
5839以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
5840
5841**系统能力**:SystemCapability.Communication.IPC.Core
5842
5843**参数:**
5844
5845  | 参数名  | 类型                                      | 必填 | 说明                                                                                   |
5846  | ------- | ----------------------------------------  | ---- | -------------------------------------------------------------------------------------- |
5847  | code    | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5848  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
5849  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
5850  | options | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5851
5852**返回值:**
5853
5854  | 类型                             | 说明                                          |
5855  | -------------------------------- | --------------------------------------------- |
5856  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
5857
5858### sendMessageRequest<sup>9+</sup>
5859
5860sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise&lt;RequestResult&gt;
5861
5862以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。
5863
5864**系统能力**:SystemCapability.Communication.IPC.Core
5865
5866**参数:**
5867
5868  | 参数名  | 类型                                 | 必填 | 说明                                                                                   |
5869  | ------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- |
5870  | code    | number                               | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5871  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
5872  | reply   | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
5873  | options | [MessageOption](#messageoption)      | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5874
5875**返回值:**
5876
5877  | 类型                         | 说明                                      |
5878  | ---------------------------- | ----------------------------------------- |
5879  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是requestResult实例。 |
5880
5881### sendMessageRequest<sup>9+</sup>
5882
5883sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void
5884
5885以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
5886
5887**系统能力**:SystemCapability.Communication.IPC.Core
5888
5889**参数:**
5890
5891  | 参数名   | 类型                                 | 必填 | 说明                                                                                   |
5892  | -------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- |
5893  | code     | number                               | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5894  | data     | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
5895  | reply    | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
5896  | options  | [MessageOption](#messageoption)      | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5897  | callback | AsyncCallback&lt;RequestResult&gt;   | 是   | 接收发送结果的回调。                                                                   |
5898
5899### sendRequest<sup>8+(deprecated)</sup>
5900
5901>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
5902
5903sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
5904
5905以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
5906
5907**系统能力**:SystemCapability.Communication.IPC.Core
5908
5909**参数:**
5910
5911  | 参数名   | 类型                                      | 必填 | 说明                                                                                   |
5912  | -------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
5913  | code     | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5914  | data     | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
5915  | reply    | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
5916  | options  | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5917  | callback | AsyncCallback&lt;SendRequestResult&gt;    | 是   | 接收发送结果的回调。                                                                   |
5918
5919### registerDeathRecipient<sup>9+</sup>
5920
5921registerDeathRecipient(recipient: DeathRecipient, flags: number): void
5922
5923注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
5924
5925**系统能力**:SystemCapability.Communication.IPC.Core
5926
5927**参数:**
5928
5929  | 参数名    | 类型                              | 必填 | 说明           |
5930  | --------- | --------------------------------- | ---- | -------------- |
5931  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
5932  | flags     | number                            | 是   | 死亡通知标志。 |
5933
5934**错误码:**
5935
5936以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
5937
5938  | 错误码ID | 错误信息 |
5939  | -------- | -------- |
5940  | 1900008  | proxy or remote object is invalid |
5941
5942### addDeathrecipient<sup>(deprecated)</sup>
5943
5944>从API version 9 开始不再维护,建议使用[registerDeathRecipient](#registerdeathrecipient9)类替代。
5945
5946addDeathRecipient(recipient: DeathRecipient, flags: number): boolean
5947
5948注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
5949
5950**系统能力**:SystemCapability.Communication.IPC.Core
5951
5952**参数:**
5953
5954  | 参数名    | 类型                              | 必填 | 说明           |
5955  | --------- | --------------------------------- | ---- | -------------- |
5956  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
5957  | flags     | number                            | 是   | 死亡通知标志。 |
5958
5959**返回值:**
5960
5961  | 类型    | 说明                                     |
5962  | ------- | ---------------------------------------- |
5963  | boolean | true:回调注册成功,false:回调注册失败。|
5964
5965### unregisterDeathRecipient<sup>9+</sup>
5966
5967unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void
5968
5969注销用于接收远程对象死亡通知的回调。
5970
5971**系统能力**:SystemCapability.Communication.IPC.Core
5972
5973**参数:**
5974
5975  | 参数名    | 类型                              | 必填 | 说明           |
5976  | --------- | --------------------------------- | ---- | -------------- |
5977  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
5978  | flags     | number                            | 是   | 死亡通知标志。 |
5979
5980**错误码:**
5981
5982以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
5983
5984  | 错误码ID | 错误信息 |
5985  | -------- | -------- |
5986  | 1900008  | proxy or remote object is invalid |
5987
5988### removeDeathRecipient<sup>(deprecated)</sup>
5989
5990>从API version 9 开始不再维护,建议使用[unregisterDeathRecipient](#unregisterdeathrecipient9)类替代。
5991
5992removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean
5993
5994注销用于接收远程对象死亡通知的回调。
5995
5996**系统能力**:SystemCapability.Communication.IPC.Core
5997
5998**参数:**
5999
6000  | 参数名    | 类型                              | 必填 | 说明           |
6001  | --------- | --------------------------------- | ---- | -------------- |
6002  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
6003  | flags     | number                            | 是   | 死亡通知标志。 |
6004
6005**返回值:**
6006
6007  | 类型    | 说明                                     |
6008  | ------- | -----------------------------------------|
6009  | boolean | true:回调注销成功,false:回调注销失败。|
6010
6011### getDescriptor<sup>9+</sup>
6012
6013getDescriptor(): string
6014
6015获取对象的接口描述符,接口描述符为字符串。
6016
6017**系统能力**:SystemCapability.Communication.IPC.Core
6018
6019**返回值:**
6020
6021  | 类型   | 说明             |
6022  | ------ | ---------------- |
6023  | string | 返回接口描述符。 |
6024
6025**错误码:**
6026
6027以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6028
6029  | 错误码ID | 错误信息 |
6030  | -------- | -------- |
6031  | 1900008  | proxy or remote object is invalid |
6032
6033### getInterfaceDescriptor<sup>(deprecated)</sup>
6034
6035>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。
6036
6037getInterfaceDescriptor(): string
6038
6039获取对象的接口描述符,接口描述符为字符串。
6040
6041**系统能力**:SystemCapability.Communication.IPC.Core
6042
6043**返回值:**
6044
6045  | 类型   | 说明             |
6046  | ------ | ---------------- |
6047  | string | 返回接口描述符。 |
6048
6049### isObjectDead
6050
6051isObjectDead(): boolean
6052
6053检查当前对象是否死亡。
6054
6055**系统能力**:SystemCapability.Communication.IPC.Core
6056
6057**返回值:**
6058
6059  | 类型    | 说明                               |
6060  | ------- | ---------------------------------- |
6061  | boolean | true:对象死亡,false:对象未死亡。|
6062
6063## RemoteProxy
6064
6065实现IRemoteObject代理对象。
6066
6067**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core6068
6069| 名称                  | 值                      | 说明                              |
6070| --------------------- | ----------------------- | --------------------------------- |
6071| PING_TRANSACTION      | 1599098439 (0x5f504e47) | 内部指令码,用于测试IPC服务正常。 |
6072| DUMP_TRANSACTION      | 1598311760 (0x5f444d50) | 内部指令码,获取Binder内部状态。  |
6073| INTERFACE_TRANSACTION | 1598968902 (0x5f4e5446) | 内部指令码,获取对端接口描述符。  |
6074| MIN_TRANSACTION_ID    | 1 (0x00000001)          | 最小有效指令码。                  |
6075| MAX_TRANSACTION_ID    | 16777215 (0x00FFFFFF)   | 最大有效指令码。                  |
6076
6077### sendRequest<sup>(deprecated)</sup>
6078
6079>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
6080
6081sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
6082
6083以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
6084
6085**系统能力**:SystemCapability.Communication.IPC.Core
6086
6087**参数:**
6088
6089  | 参数名  | 类型                                      | 必填 | 说明                                                                                   |
6090  | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
6091  | code    | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6092  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
6093  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
6094  | options | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6095
6096**返回值:**
6097
6098  | 类型    | 说明                             |
6099  | ------- | ---------------------------------|
6100  | boolean | true:发送成功,false:发送失败。|
6101
6102**示例:**
6103
6104  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6105
6106  ```ts
6107  // 仅FA模型需要导入@ohos.ability.featureAbility
6108  // import FA from "@ohos.ability.featureAbility";
6109
6110  let proxy;
6111  let connect = {
6112      onConnect: function(elementName, remoteProxy) {
6113          console.log("RpcClient: js onConnect called.");
6114          proxy = remoteProxy;
6115      },
6116      onDisconnect: function(elementName) {
6117          console.log("RpcClient: onDisconnect");
6118      },
6119      onFailed: function() {
6120          console.log("RpcClient: onFailed");
6121      }
6122  };
6123  let want = {
6124      "bundleName": "com.ohos.server",
6125      "abilityName": "com.ohos.server.EntryAbility",
6126  };
6127
6128  // FA模型使用此方法连接服务
6129  // FA.connectAbility(want,connect);
6130
6131  globalThis.context.connectServiceExtensionAbility(want, connect);
6132  ```
6133
6134  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息
6135
6136  ```ts
6137  let option = new rpc.MessageOption();
6138  let data = rpc.MessageParcel.create();
6139  let reply = rpc.MessageParcel.create();
6140  data.writeInt(1);
6141  data.writeString("hello");
6142  let ret: boolean = proxy.sendRequest(1, data, reply, option);
6143  if (ret) {
6144      console.log("sendRequest got result");
6145      let msg = reply.readString();
6146      console.log("RPCTest: reply msg: " + msg);
6147  } else {
6148      console.log("RPCTest: sendRequest failed");
6149  }
6150  console.log("RPCTest: sendRequest ends, reclaim parcel");
6151  data.reclaim();
6152  reply.reclaim();
6153  ```
6154
6155### sendMessageRequest<sup>9+</sup>
6156
6157sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise&lt;RequestResult&gt;
6158
6159以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。
6160
6161**系统能力**:SystemCapability.Communication.IPC.Core
6162
6163**参数:**
6164
6165  | 参数名  | 类型                                 | 必填 | 说明                                                                                   |
6166  | ------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- |
6167  | code    | number                               | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6168  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
6169  | reply   | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
6170  | options | [MessageOption](#messageoption)      | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6171
6172**返回值:**
6173
6174  | 类型                         | 说明                                      |
6175  | ---------------------------- | ----------------------------------------- |
6176  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是requestResult实例。 |
6177
6178**示例:**
6179
6180  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6181
6182  ```ts
6183  // 仅FA模型需要导入@ohos.ability.featureAbility
6184  // import FA from "@ohos.ability.featureAbility";
6185
6186  let proxy;
6187  let connect = {
6188      onConnect: function(elementName, remoteProxy) {
6189          console.log("RpcClient: js onConnect called.");
6190          proxy = remoteProxy;
6191      },
6192      onDisconnect: function(elementName) {
6193          console.log("RpcClient: onDisconnect");
6194      },
6195      onFailed: function() {
6196          console.log("RpcClient: onFailed");
6197      }
6198  };
6199  let want = {
6200      "bundleName": "com.ohos.server",
6201      "abilityName": "com.ohos.server.EntryAbility",
6202  };
6203
6204  // FA模型使用此方法连接服务
6205  // FA.connectAbility(want,connect);
6206
6207  globalThis.context.connectServiceExtensionAbility(want, connect);
6208  ```
6209
6210  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息
6211
6212  ```ts
6213  let option = new rpc.MessageOption();
6214  let data = rpc.MessageSequence.create();
6215  let reply = rpc.MessageSequence.create();
6216  data.writeInt(1);
6217  data.writeString("hello");
6218  proxy.sendMessageRequest(1, data, reply, option)
6219      .then(function(result) {
6220          if (result.errCode === 0) {
6221              console.log("sendMessageRequest got result");
6222              result.reply.readException();
6223              let msg = result.reply.readString();
6224              console.log("RPCTest: reply msg: " + msg);
6225          } else {
6226              console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
6227          }
6228      }).catch(function(e) {
6229          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
6230      }).finally (() => {
6231          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
6232          data.reclaim();
6233          reply.reclaim();
6234      });
6235  ```
6236
6237### sendRequest<sup>8+(deprecated)</sup>
6238
6239>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
6240
6241sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise&lt;SendRequestResult&gt;
6242
6243以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
6244
6245**系统能力**:SystemCapability.Communication.IPC.Core
6246
6247**参数:**
6248
6249  | 参数名  | 类型                                      | 必填 | 说明                                                                                   |
6250  | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
6251  | code    | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6252  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
6253  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
6254  | options | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6255
6256**返回值:**
6257
6258  | 类型                             | 说明                                          |
6259  | -------------------------------- | --------------------------------------------- |
6260  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
6261
6262**示例:**
6263
6264  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6265
6266  ```ts
6267  // 仅FA模型需要导入@ohos.ability.featureAbility
6268  // import FA from "@ohos.ability.featureAbility";
6269
6270  let proxy;
6271  let connect = {
6272      onConnect: function(elementName, remoteProxy) {
6273          console.log("RpcClient: js onConnect called.");
6274          proxy = remoteProxy;
6275      },
6276      onDisconnect: function(elementName) {
6277          console.log("RpcClient: onDisconnect");
6278      },
6279      onFailed: function() {
6280          console.log("RpcClient: onFailed");
6281      }
6282  };
6283  let want = {
6284      "bundleName": "com.ohos.server",
6285      "abilityName": "com.ohos.server.EntryAbility",
6286  };
6287
6288  // FA模型使用此方法连接服务
6289  // FA.connectAbility(want,connect);
6290
6291  globalThis.context.connectServiceExtensionAbility(want, connect);
6292  ```
6293
6294  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息
6295
6296  ```ts
6297  let option = new rpc.MessageOption();
6298  let data = rpc.MessageParcel.create();
6299  let reply = rpc.MessageParcel.create();
6300  data.writeInt(1);
6301  data.writeString("hello");
6302  proxy.sendRequest(1, data, reply, option)
6303      .then(function(result) {
6304          if (result.errCode === 0) {
6305              console.log("sendRequest got result");
6306              result.reply.readException();
6307              let msg = result.reply.readString();
6308              console.log("RPCTest: reply msg: " + msg);
6309          } else {
6310              console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
6311          }
6312      }).catch(function(e) {
6313          console.log("RPCTest: sendRequest got exception: " + e.message);
6314      }).finally (() => {
6315          console.log("RPCTest: sendRequest ends, reclaim parcel");
6316          data.reclaim();
6317          reply.reclaim();
6318      });
6319  ```
6320
6321### sendMessageRequest<sup>9+</sup>
6322
6323sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void
6324
6325以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendMessageRequest返回后的某个时机执行回调,回复内容在RequestResult的reply报文里。
6326
6327**系统能力**:SystemCapability.Communication.IPC.Core
6328
6329**参数:**
6330
6331  | 参数名   | 类型                                 | 必填 | 说明                                                                                   |
6332  | -------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- |
6333  | code     | number                               | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6334  | data     | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
6335  | reply    | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
6336  | options  | [MessageOption](#messageoption)      | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6337  | callback | AsyncCallback&lt;RequestResult&gt;   | 是   | 接收发送结果的回调。                                                                   |
6338
6339**示例:**
6340
6341  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6342
6343  ```ts
6344  // 仅FA模型需要导入@ohos.ability.featureAbility
6345  // import FA from "@ohos.ability.featureAbility";
6346
6347  let proxy;
6348  let connect = {
6349      onConnect: function(elementName, remoteProxy) {
6350          console.log("RpcClient: js onConnect called.");
6351          proxy = remoteProxy;
6352      },
6353      onDisconnect: function(elementName) {
6354          console.log("RpcClient: onDisconnect");
6355      },
6356      onFailed: function() {
6357          console.log("RpcClient: onFailed");
6358      }
6359  };
6360  let want = {
6361      "bundleName": "com.ohos.server",
6362      "abilityName": "com.ohos.server.EntryAbility",
6363  };
6364  function sendRequestCallback(result) {
6365      if (result.errCode === 0) {
6366          console.log("sendRequest got result");
6367          result.reply.readException();
6368          let msg = result.reply.readString();
6369          console.log("RPCTest: reply msg: " + msg);
6370      } else {
6371          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
6372      }
6373      console.log("RPCTest: sendRequest ends, reclaim parcel");
6374      result.data.reclaim();
6375      result.reply.reclaim();
6376  }
6377
6378  // FA模型使用此方法连接服务
6379  // FA.connectAbility(want,connect);
6380
6381  globalThis.context.connectServiceExtensionAbility(want, connect);
6382  ```
6383
6384  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息
6385
6386  ```ts
6387  let option = new rpc.MessageOption();
6388  let data = rpc.MessageSequence.create();
6389  let reply = rpc.MessageSequence.create();
6390  data.writeInt(1);
6391  data.writeString("hello");
6392  try {
6393      proxy.sendMessageRequest(1, data, reply, option, sendRequestCallback);
6394  } catch(error) {
6395      console.info("rpc send sequence request fail, errorCode " + error.code);
6396      console.info("rpc send sequence request fail, errorMessage " + error.message);
6397  }
6398  ```
6399
6400### sendRequest<sup>8+(deprecated)</sup>
6401
6402>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
6403
6404sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
6405
6406以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
6407
6408**系统能力**:SystemCapability.Communication.IPC.Core
6409
6410**参数:**
6411
6412  | 参数名   | 类型                                      | 必填 | 说明                                                                                   |
6413  | -------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
6414  | code     | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6415  | data     | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
6416  | reply    | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
6417  | options  | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6418  | callback | AsyncCallback&lt;SendRequestResult&gt;    | 是   | 接收发送结果的回调。                                                                   |
6419
6420**示例:**
6421
6422  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6423
6424  ```ts
6425  // 仅FA模型需要导入@ohos.ability.featureAbility
6426  // import FA from "@ohos.ability.featureAbility";
6427
6428  let proxy;
6429  let connect = {
6430      onConnect: function(elementName, remoteProxy) {
6431          console.log("RpcClient: js onConnect called.");
6432          proxy = remoteProxy;
6433      },
6434      onDisconnect: function(elementName) {
6435          console.log("RpcClient: onDisconnect");
6436      },
6437      onFailed: function() {
6438          console.log("RpcClient: onFailed");
6439      }
6440  };
6441  let want = {
6442      "bundleName": "com.ohos.server",
6443      "abilityName": "com.ohos.server.EntryAbility",
6444  };
6445 function sendRequestCallback(result) {
6446      if (result.errCode === 0) {
6447          console.log("sendRequest got result");
6448          result.reply.readException();
6449          let msg = result.reply.readString();
6450          console.log("RPCTest: reply msg: " + msg);
6451      } else {
6452          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
6453      }
6454      console.log("RPCTest: sendRequest ends, reclaim parcel");
6455      result.data.reclaim();
6456      result.reply.reclaim();
6457  }
6458
6459  // FA模型使用此方法连接服务
6460  // FA.connectAbility(want,connect);
6461
6462  globalThis.context.connectServiceExtensionAbility(want, connect);
6463  ```
6464
6465  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息
6466
6467  ```ts
6468  let option = new rpc.MessageOption();
6469  let data = rpc.MessageParcel.create();
6470  let reply = rpc.MessageParcel.create();
6471  data.writeInt(1);
6472  data.writeString("hello");
6473  proxy.sendRequest(1, data, reply, option, sendRequestCallback);
6474  ```
6475
6476### getLocalInterface<sup>9+</sup>
6477
6478getLocalInterface(interface: string): IRemoteBroker
6479
6480查询并获取当前接口描述符对应的本地接口对象。
6481
6482**系统能力**:SystemCapability.Communication.IPC.Core
6483
6484**参数:**
6485
6486  | 参数名    | 类型   | 必填 | 说明                   |
6487  | --------- | ------ | ---- | ---------------------- |
6488  | interface | string | 是   | 需要查询的接口描述符。 |
6489
6490**返回值:**
6491
6492  | 类型          | 说明                                       |
6493  | ------------- | ------------------------------------------ |
6494  | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 |
6495
6496**错误码:**
6497
6498以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6499
6500  | 错误码ID | 错误信息 |
6501  | -------- | -------- |
6502  | 1900006  | only remote object permitted |
6503
6504**示例:**
6505
6506  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6507
6508  ```ts
6509  // 仅FA模型需要导入@ohos.ability.featureAbility
6510  // import FA from "@ohos.ability.featureAbility";
6511
6512  let proxy;
6513  let connect = {
6514      onConnect: function(elementName, remoteProxy) {
6515          console.log("RpcClient: js onConnect called.");
6516          proxy = remoteProxy;
6517      },
6518      onDisconnect: function(elementName) {
6519          console.log("RpcClient: onDisconnect");
6520      },
6521      onFailed: function() {
6522          console.log("RpcClient: onFailed");
6523      }
6524  };
6525  let want = {
6526      "bundleName": "com.ohos.server",
6527      "abilityName": "com.ohos.server.EntryAbility",
6528  };
6529
6530  // FA模型使用此方法连接服务
6531  // FA.connectAbility(want,connect);
6532
6533  globalThis.context.connectServiceExtensionAbility(want, connect);
6534  ```
6535
6536  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的getLocalInterface接口方法查询接口对象
6537
6538  ```ts
6539  try {
6540      let broker = proxy.getLocalInterface("testObject");
6541      console.log("RpcClient: getLocalInterface is " + broker);
6542  } catch(error) {
6543      console.info("rpc get local interface fail, errorCode " + error.code);
6544      console.info("rpc get local interface fail, errorMessage " + error.message);
6545  }
6546  ```
6547
6548### queryLocalInterface<sup>(deprecated)</sup>
6549
6550>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。
6551
6552queryLocalInterface(interface: string): IRemoteBroker
6553
6554查询并获取当前接口描述符对应的本地接口对象。
6555
6556**系统能力**:SystemCapability.Communication.IPC.Core
6557
6558**参数:**
6559
6560  | 参数名    | 类型   | 必填 | 说明                   |
6561  | --------- | ------ | ---- | ---------------------- |
6562  | interface | string | 是   | 需要查询的接口描述符。 |
6563
6564**返回值:**
6565
6566  | 类型          | 说明                                       |
6567  | ------------- | ------------------------------------------ |
6568  | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 |
6569
6570**示例:**
6571
6572  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6573
6574  ```ts
6575  // 仅FA模型需要导入@ohos.ability.featureAbility
6576  // import FA from "@ohos.ability.featureAbility";
6577
6578  let proxy;
6579  let connect = {
6580      onConnect: function(elementName, remoteProxy) {
6581          console.log("RpcClient: js onConnect called.");
6582          proxy = remoteProxy;
6583      },
6584      onDisconnect: function(elementName) {
6585          console.log("RpcClient: onDisconnect");
6586      },
6587      onFailed: function() {
6588          console.log("RpcClient: onFailed");
6589      }
6590  };
6591  let want = {
6592      "bundleName": "com.ohos.server",
6593      "abilityName": "com.ohos.server.EntryAbility",
6594  };
6595
6596  // FA模型使用此方法连接服务
6597  // FA.connectAbility(want,connect);
6598
6599  globalThis.context.connectServiceExtensionAbility(want, connect);
6600  ```
6601
6602  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的queryLocalInterface接口获取接口对象
6603
6604  ```ts
6605  let broker = proxy.queryLocalInterface("testObject");
6606  console.log("RpcClient: queryLocalInterface is " + broker);
6607  ```
6608
6609### registerDeathRecipient<sup>9+</sup>
6610
6611registerDeathRecipient(recipient: DeathRecipient, flags: number): void
6612
6613注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
6614
6615**系统能力**:SystemCapability.Communication.IPC.Core
6616
6617**参数:**
6618
6619  | 参数名    | 类型                              | 必填 | 说明           |
6620  | --------- | --------------------------------- | ---- | -------------- |
6621  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
6622  | flags     | number                            | 是   | 死亡通知标志。 |
6623
6624**错误码:**
6625
6626以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6627
6628  | 错误码ID | 错误信息 |
6629  | -------- | -------- |
6630  | 1900008  | proxy or remote object is invalid |
6631
6632**示例:**
6633
6634  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6635
6636  ```ts
6637  // 仅FA模型需要导入@ohos.ability.featureAbility
6638  // import FA from "@ohos.ability.featureAbility";
6639
6640  let proxy;
6641  let connect = {
6642      onConnect: function(elementName, remoteProxy) {
6643          console.log("RpcClient: js onConnect called.");
6644          proxy = remoteProxy;
6645      },
6646      onDisconnect: function(elementName) {
6647          console.log("RpcClient: onDisconnect");
6648      },
6649      onFailed: function() {
6650          console.log("RpcClient: onFailed");
6651      }
6652  };
6653  let want = {
6654      "bundleName": "com.ohos.server",
6655      "abilityName": "com.ohos.server.EntryAbility",
6656  };
6657
6658  // FA模型使用此方法连接服务
6659  // FA.connectAbility(want,connect);
6660
6661  globalThis.context.connectServiceExtensionAbility(want, connect);
6662  ```
6663
6664  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的registerDeathRecipient接口注册死亡回调
6665
6666  ```ts
6667  class MyDeathRecipient {
6668      onRemoteDied() {
6669          console.log("server died");
6670      }
6671  }
6672  let deathRecipient = new MyDeathRecipient();
6673  try {
6674      proxy.registerDeathRecipient(deathRecipient, 0);
6675  } catch(error) {
6676      console.info("proxy register deathRecipient fail, errorCode " + error.code);
6677      console.info("proxy register deathRecipient fail, errorMessage " + error.message);
6678  }
6679  ```
6680
6681### addDeathRecipient<sup>(deprecated)</sup>
6682
6683>从API version 9 开始不再维护,建议使用[registerDeathRecipient](#registerdeathrecipient9)类替代。
6684
6685addDeathRecipient(recipient: DeathRecipient, flags: number): boolean
6686
6687注册用于接收远程对象死亡通知的回调,增加proxy对象上的死亡通知。
6688
6689**系统能力**:SystemCapability.Communication.IPC.Core
6690
6691**参数:**
6692
6693  | 参数名    | 类型                              | 必填 | 说明                              |
6694  | --------- | --------------------------------- | ---- | --------------------------------- |
6695  | recipient | [DeathRecipient](#deathrecipient) | 是   | 收件人表示要注册的回调。          |
6696  | flags     | number                            | 是   | 死亡通知标志。保留参数。设置为0。 |
6697
6698**返回值:**
6699
6700  | 类型    | 说明                                     |
6701  | ------- | ---------------------------------------- |
6702  | boolean | true:回调注册成功,false:回调注册失败。|
6703
6704**示例:**
6705
6706  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6707
6708  ```ts
6709  // 仅FA模型需要导入@ohos.ability.featureAbility
6710  // import FA from "@ohos.ability.featureAbility";
6711
6712  let proxy;
6713  let connect = {
6714      onConnect: function(elementName, remoteProxy) {
6715          console.log("RpcClient: js onConnect called.");
6716          proxy = remoteProxy;
6717      },
6718      onDisconnect: function(elementName) {
6719          console.log("RpcClient: onDisconnect");
6720      },
6721      onFailed: function() {
6722          console.log("RpcClient: onFailed");
6723      }
6724  };
6725  let want = {
6726      "bundleName": "com.ohos.server",
6727      "abilityName": "com.ohos.server.EntryAbility",
6728  };
6729
6730  // FA模型使用此方法连接服务
6731  // FA.connectAbility(want,connect);
6732
6733  globalThis.context.connectServiceExtensionAbility(want, connect);
6734  ```
6735
6736  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的addDeathRecipient接口方法新增死亡回调
6737
6738  ```ts
6739  class MyDeathRecipient {
6740      onRemoteDied() {
6741          console.log("server died");
6742      }
6743  }
6744  let deathRecipient = new MyDeathRecipient();
6745  proxy.addDeathRecipient(deathRecipient, 0);
6746  ```
6747
6748### unregisterDeathRecipient<sup>9+</sup>
6749
6750unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void
6751
6752注销用于接收远程对象死亡通知的回调。
6753
6754**系统能力**:SystemCapability.Communication.IPC.Core
6755
6756**参数:**
6757
6758  | 参数名    | 类型                              | 必填 | 说明           |
6759  | --------- | --------------------------------- | ---- | -------------- |
6760  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
6761  | flags     | number                            | 是   | 死亡通知标志。 |
6762
6763**错误码:**
6764
6765以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6766
6767  | 错误码ID | 错误信息 |
6768  | -------- | -------- |
6769  | 1900008  | proxy or remote object is invalid |
6770
6771**示例:**
6772
6773  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6774
6775  ```ts
6776  // 仅FA模型需要导入@ohos.ability.featureAbility
6777  // import FA from "@ohos.ability.featureAbility";
6778
6779  let proxy;
6780  let connect = {
6781      onConnect: function(elementName, remoteProxy) {
6782          console.log("RpcClient: js onConnect called.");
6783          proxy = remoteProxy;
6784      },
6785      onDisconnect: function(elementName) {
6786          console.log("RpcClient: onDisconnect");
6787      },
6788      onFailed: function() {
6789          console.log("RpcClient: onFailed");
6790      }
6791  };
6792  let want = {
6793      "bundleName": "com.ohos.server",
6794      "abilityName": "com.ohos.server.EntryAbility",
6795  };
6796
6797  // FA模型使用此方法连接服务
6798  // FA.connectAbility(want,connect);
6799
6800  globalThis.context.connectServiceExtensionAbility(want, connect);
6801  ```
6802
6803  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的unregisterDeathRecipient接口方法注销死亡回调
6804
6805  ```ts
6806  class MyDeathRecipient {
6807      onRemoteDied() {
6808          console.log("server died");
6809      }
6810  }
6811  let deathRecipient = new MyDeathRecipient();
6812  try {
6813      proxy.registerDeathRecipient(deathRecipient, 0);
6814      proxy.unregisterDeathRecipient(deathRecipient, 0);
6815  } catch(error) {
6816      console.info("proxy register deathRecipient fail, errorCode " + error.code);
6817      console.info("proxy register deathRecipient fail, errorMessage " + error.message);
6818  }
6819  ```
6820
6821### removeDeathRecipient<sup>(deprecated)</sup>
6822
6823>从API version 9 开始不再维护,建议使用[unregisterDeathRecipient](#unregisterdeathrecipient9)类替代。
6824
6825removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean
6826
6827注销用于接收远程对象死亡通知的回调。
6828
6829**系统能力**:SystemCapability.Communication.IPC.Core
6830
6831**参数:**
6832
6833  | 参数名    | 类型                              | 必填 | 说明                              |
6834  | --------- | --------------------------------- | ---- | --------------------------------- |
6835  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的死亡回调。                |
6836  | flags     | number                            | 是   | 死亡通知标志。保留参数。设置为0。 |
6837
6838**返回值:**
6839
6840  | 类型    | 说明                                     |
6841  | ------- | ---------------------------------------- |
6842  | boolean | true:回调注销成功,false:回调注销失败。|
6843
6844**示例:**
6845
6846  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6847
6848  ```ts
6849  // 仅FA模型需要导入@ohos.ability.featureAbility
6850  // import FA from "@ohos.ability.featureAbility";
6851
6852  let proxy;
6853  let connect = {
6854      onConnect: function(elementName, remoteProxy) {
6855          console.log("RpcClient: js onConnect called.");
6856          proxy = remoteProxy;
6857      },
6858      onDisconnect: function(elementName) {
6859          console.log("RpcClient: onDisconnect");
6860      },
6861      onFailed: function() {
6862          console.log("RpcClient: onFailed");
6863      }
6864  };
6865  let want = {
6866      "bundleName": "com.ohos.server",
6867      "abilityName": "com.ohos.server.EntryAbility",
6868  };
6869
6870  // FA模型使用此方法连接服务
6871  // FA.connectAbility(want,connect);
6872
6873  globalThis.context.connectServiceExtensionAbility(want, connect);
6874  ```
6875
6876  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的removeDeathRecipient接口方法去注册死亡回调
6877
6878  ```ts
6879  class MyDeathRecipient {
6880      onRemoteDied() {
6881          console.log("server died");
6882      }
6883  }
6884  let deathRecipient = new MyDeathRecipient();
6885  proxy.addDeathRecipient(deathRecipient, 0);
6886  proxy.removeDeathRecipient(deathRecipient, 0);
6887  ```
6888
6889### getDescriptor<sup>9+</sup>
6890
6891getDescriptor(): string
6892
6893获取对象的接口描述符,接口描述符为字符串。
6894
6895**系统能力**:SystemCapability.Communication.IPC.Core
6896
6897**返回值:**
6898
6899  | 类型   | 说明             |
6900  | ------ | ---------------- |
6901  | string | 返回接口描述符。 |
6902
6903**错误码:**
6904
6905以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6906
6907  | 错误码ID | 错误信息 |
6908  | -------- | -------- |
6909  | 1900008  | proxy or remote object is invalid |
6910  | 1900007  | communication failed              |
6911
6912**示例:**
6913
6914  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6915
6916  ```ts
6917  // 仅FA模型需要导入@ohos.ability.featureAbility
6918  // import FA from "@ohos.ability.featureAbility";
6919
6920  let proxy;
6921  let connect = {
6922      onConnect: function(elementName, remoteProxy) {
6923          console.log("RpcClient: js onConnect called.");
6924          proxy = remoteProxy;
6925      },
6926      onDisconnect: function(elementName) {
6927          console.log("RpcClient: onDisconnect");
6928      },
6929      onFailed: function() {
6930          console.log("RpcClient: onFailed");
6931      }
6932  };
6933  let want = {
6934      "bundleName": "com.ohos.server",
6935      "abilityName": "com.ohos.server.EntryAbility",
6936  };
6937
6938  // FA模型使用此方法连接服务
6939  // FA.connectAbility(want,connect);
6940
6941  globalThis.context.connectServiceExtensionAbility(want, connect);
6942  ```
6943  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的getDescriptor接口方法获取对象的接口描述符
6944
6945  ```ts
6946  try {
6947      let descriptor = proxy.getDescriptor();
6948      console.log("RpcClient: descriptor is " + descriptor);
6949  } catch(error) {
6950      console.info("rpc get interface descriptor fail, errorCode " + error.code);
6951      console.info("rpc get interface descriptor fail, errorMessage " + error.message);
6952  }
6953  ```
6954
6955### getInterfaceDescriptor<sup>(deprecated)</sup>
6956
6957>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。
6958
6959getInterfaceDescriptor(): string
6960
6961查询当前代理对象接口的描述符。
6962
6963**系统能力**:SystemCapability.Communication.IPC.Core
6964
6965**返回值:**
6966
6967  | 类型   | 说明               |
6968  | ------ | ------------------ |
6969  | string | 当前的接口描述符。 |
6970
6971**示例:**
6972
6973  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
6974
6975  ```ts
6976  // 仅FA模型需要导入@ohos.ability.featureAbility
6977  // import FA from "@ohos.ability.featureAbility";
6978
6979  let proxy;
6980  let connect = {
6981      onConnect: function(elementName, remoteProxy) {
6982          console.log("RpcClient: js onConnect called.");
6983          proxy = remoteProxy;
6984      },
6985      onDisconnect: function(elementName) {
6986          console.log("RpcClient: onDisconnect");
6987      },
6988      onFailed: function() {
6989          console.log("RpcClient: onFailed");
6990      }
6991  };
6992  let want = {
6993      "bundleName": "com.ohos.server",
6994      "abilityName": "com.ohos.server.EntryAbility",
6995  };
6996
6997  // FA模型使用此方法连接服务
6998  // FA.connectAbility(want,connect);
6999
7000  globalThis.context.connectServiceExtensionAbility(want, connect);
7001  ```
7002
7003  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的getInterfaceDescriptor接口方法查询当前代理对象接口的描述符
7004
7005  ```ts
7006  let descriptor = proxy.getInterfaceDescriptor();
7007  console.log("RpcClient: descriptor is " + descriptor);
7008  ```
7009
7010### isObjectDead
7011
7012isObjectDead(): boolean
7013
7014指示对应的RemoteObject是否死亡。
7015
7016**系统能力**:SystemCapability.Communication.IPC.Core
7017
7018**返回值:**
7019
7020  | 类型    | 说明                                              |
7021  | ------- | ------------------------------------------------- |
7022  | boolean | true:对应的对象已经死亡,false:对应的对象未死亡 |
7023
7024**示例:**
7025
7026  Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context)
7027
7028  ```ts
7029  // 仅FA模型需要导入@ohos.ability.featureAbility
7030  // import FA from "@ohos.ability.featureAbility";
7031
7032  let proxy;
7033  let connect = {
7034      onConnect: function(elementName, remoteProxy) {
7035          console.log("RpcClient: js onConnect called.");
7036          proxy = remoteProxy;
7037      },
7038      onDisconnect: function(elementName) {
7039          console.log("RpcClient: onDisconnect");
7040      },
7041      onFailed: function() {
7042          console.log("RpcClient: onFailed");
7043      }
7044  };
7045  let want = {
7046      "bundleName": "com.ohos.server",
7047      "abilityName": "com.ohos.server.EntryAbility",
7048  };
7049
7050  // FA模型使用此方法连接服务
7051  // FA.connectAbility(want,connect);
7052
7053  globalThis.context.connectServiceExtensionAbility(want, connect);
7054  ```
7055
7056  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的isObjectDead接口方法判断当前对象是否已经死亡
7057
7058  ```ts
7059  let isDead = proxy.isObjectDead();
7060  console.log("RpcClient: isObjectDead is " + isDead);
7061  ```
7062
7063## MessageOption
7064
7065公共消息选项(int标志,int等待时间),使用标志中指定的标志构造指定的MessageOption对象。
7066
7067**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core7068
7069  | 名称          | 值        | 说明                                                        |
7070  | ------------- | --------- | ----------------------------------------------------------- |
7071  | TF_SYNC       | 0 (0x00)  | 同步调用标识。                                              |
7072  | TF_ASYNC      | 1 (0x01)  | 异步调用标识。                                              |
7073  | TF_ACCEPT_FDS | 16 (0x10) | 指示sendMessageRequest<sup>9+</sup>接口可以返回文件描述符。 |
7074  | TF_WAIT_TIME  | 4 (0x4)   | 默认等待时间(单位/秒)。                                     |
7075
7076### constructor<sup>9+</sup>
7077
7078constructor(async?: boolean);
7079
7080MessageOption构造函数。
7081
7082**系统能力**:SystemCapability.Communication.IPC.Core
7083
7084**参数:**
7085
7086| 参数名 | 类型    | 必填 | 说明                                   |
7087| ------ | ------- | ---- | -------------------------------------- |
7088| async  | boolean | 否   | 同步调用或异步调用标志。默认同步调用。 |
7089
7090**示例:**
7091
7092  ```ts
7093  class TestRemoteObject extends rpc.MessageOption {
7094    constructor(async) {
7095        super(async);
7096    }
7097  }
7098  ```
7099
7100### constructor
7101
7102constructor(syncFlags?: number, waitTime?: number)
7103
7104MessageOption构造函数。
7105
7106**系统能力**:SystemCapability.Communication.IPC.Core
7107
7108**参数:**
7109
7110  | 参数名    | 类型   | 必填 | 说明                                          |
7111  | --------- | ------ | ---- | --------------------------------------------- |
7112  | syncFlags | number | 否   | 同步调用或异步调用标志。默认同步调用。        |
7113  | waitTime  | number | 否   | 调用rpc最长等待时间。默认&nbsp;TF_WAIT_TIME。 |
7114
7115**示例:**
7116
7117  ```ts
7118  class TestRemoteObject extends rpc.MessageOption {
7119    constructor(syncFlags,waitTime) {
7120        super(syncFlags,waitTime);
7121    }
7122  }
7123  ```
7124### isAsync<sup>9+</sup>
7125
7126isAsync(): boolean;
7127
7128获取SendMessageRequest调用中确定同步或是异步的标志。
7129
7130**系统能力**:SystemCapability.Communication.IPC.Core
7131
7132**返回值:**
7133
7134  | 类型    | 说明                                     |
7135  | ------- | ---------------------------------------- |
7136  | boolean | true:异步调用成功,false:同步调用成功。|
7137
7138**示例:**
7139
7140  ```ts
7141  let option = new rpc.MessageOption();
7142  let isAsync = option.isAsync();
7143  ```
7144
7145### setAsync<sup>9+</sup>
7146
7147setAsync(async: boolean): void;
7148
7149设置SendMessageRequest调用中确定同步或是异步的标志。
7150
7151**系统能力**:SystemCapability.Communication.IPC.Core
7152
7153**示例:**
7154
7155  ```ts
7156  let option = new rpc.MessageOption();
7157  let setAsync = option.setAsync(true);
7158  console.log("Set synchronization flag");
7159  ```
7160
7161### getFlags
7162
7163getFlags(): number
7164
7165获取同步调用或异步调用标志。
7166
7167**系统能力**:SystemCapability.Communication.IPC.Core
7168
7169**返回值:**
7170
7171  | 类型   | 说明                                 |
7172  | ------ | ------------------------------------ |
7173  | number | 调用成功返回同步调用或异步调用标志。 |
7174
7175**示例:**
7176
7177  ```ts
7178  try {
7179      let option = new rpc.MessageOption();
7180      console.info("create object successfully.");
7181      let flog = option.getFlags();
7182      console.info("run getFlags success, flog is " + flog);
7183      option.setFlags(1)
7184      console.info("run setFlags success");
7185      let flog2 = option.getFlags();
7186      console.info("run getFlags success, flog2 is " + flog2);
7187  } catch (error) {
7188      console.info("error " + error);
7189  }
7190  ```
7191
7192### setFlags
7193
7194setFlags(flags: number): void
7195
7196设置同步调用或异步调用标志。
7197
7198**系统能力**:SystemCapability.Communication.IPC.Core
7199
7200**参数:**
7201
7202  | 参数名 | 类型   | 必填 | 说明                     |
7203  | ------ | ------ | ---- | ------------------------ |
7204  | flags  | number | 是   | 同步调用或异步调用标志。 |
7205
7206**示例:**
7207
7208  ```ts
7209  try {
7210      let option = new rpc.MessageOption();
7211      option.setFlags(1)
7212      console.info("run setFlags success");
7213      let flog = option.getFlags();
7214      console.info("run getFlags success, flog is " + flog);
7215  } catch (error) {
7216      console.info("error " + error);
7217  }
7218  ```
7219
7220### getWaitTime
7221
7222getWaitTime(): number
7223
7224获取rpc调用的最长等待时间。
7225
7226**系统能力**:SystemCapability.Communication.IPC.Core
7227
7228**返回值:**
7229
7230  | 类型   | 说明              |
7231  | ------ | ----------------- |
7232  | number | rpc最长等待时间。 |
7233
7234**示例:**
7235
7236  ```ts
7237  try {
7238      let option = new rpc.MessageOption();
7239      let time = option.getWaitTime();
7240      console.info("run getWaitTime success");
7241      option.setWaitTime(16);
7242      let time2 = option.getWaitTime();
7243      console.info("run getWaitTime success, time is " + time);
7244  } catch (error) {
7245      console.info("error " + error);
7246  }
7247  ```
7248
7249### setWaitTime
7250
7251setWaitTime(waitTime: number): void
7252
7253设置rpc调用最长等待时间。
7254
7255**系统能力**:SystemCapability.Communication.IPC.Core
7256
7257**参数:**
7258
7259  | 参数名   | 类型   | 必填 | 说明                  |
7260  | -------- | ------ | ---- | --------------------- |
7261  | waitTime | number | 是   | rpc调用最长等待时间。 |
7262
7263**示例:**
7264
7265  ```ts
7266  try {
7267      let option = new rpc.MessageOption();
7268      option.setWaitTime(16);
7269      let time = option.getWaitTime();
7270      console.info("run getWaitTime success, time is " + time);
7271  } catch (error) {
7272      console.info("error " + error);
7273  }
7274  ```
7275
7276## IPCSkeleton
7277
7278用于获取IPC上下文信息,包括获取UID和PID、获取本端和对端设备ID、检查接口调用是否在同一设备上。
7279
7280### getContextObject
7281
7282static getContextObject(): IRemoteObject
7283
7284静态方法,获取系统能力的管理者。
7285
7286**系统能力**:SystemCapability.Communication.IPC.Core
7287
7288**返回值:**
7289
7290  | 类型                            | 说明                 |
7291  | ------------------------------- | -------------------- |
7292  | [IRemoteObject](#iremoteobject) | 返回系统能力管理者。 |
7293
7294**示例:**
7295
7296  ```ts
7297  let samgr = rpc.IPCSkeleton.getContextObject();
7298  console.log("RpcServer: getContextObject result: " + samgr);
7299  ```
7300
7301### getCallingPid
7302
7303static getCallingPid(): number
7304
7305静态方法,获取调用者的PID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的PID。
7306
7307**系统能力**:SystemCapability.Communication.IPC.Core
7308
7309**返回值:**
7310
7311  | 类型   | 说明              |
7312  | ------ | ----------------- |
7313  | number | 返回调用者的PID。 |
7314
7315**示例:**
7316
7317  ```ts
7318  class Stub extends rpc.RemoteObject {
7319      onRemoteMessageRequest(code, data, reply, option) {
7320          let callerPid = rpc.IPCSkeleton.getCallingPid();
7321          console.log("RpcServer: getCallingPid result: " + callerPid);
7322          return true;
7323      }
7324 }
7325  ```
7326
7327### getCallingUid
7328
7329static getCallingUid(): number
7330
7331静态方法,获取调用者的UID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的UID。
7332
7333**系统能力**:SystemCapability.Communication.IPC.Core
7334
7335**返回值:**
7336
7337  | 类型   | 说明              |
7338  | ------ | ----------------- |
7339  | number | 返回调用者的UID。 |
7340
7341**示例:**
7342
7343  ```ts
7344  class Stub extends rpc.RemoteObject {
7345      onRemoteMessageRequest(code, data, reply, option) {
7346          let callerUid = rpc.IPCSkeleton.getCallingUid();
7347          console.log("RpcServer: getCallingUid result: " + callerUid);
7348          return true;
7349      }
7350  }
7351  ```
7352
7353### getCallingTokenId<sup>8+</sup>
7354
7355static getCallingTokenId(): number;
7356
7357静态方法,获取调用者的TokenId,用于被调用方对调用方的身份校验。
7358
7359**系统能力**:SystemCapability.Communication.IPC.Core
7360
7361**返回值:**
7362
7363   | 类型   | 说明                  |
7364   | ------ | --------------------- |
7365   | number | 返回调用者的TokenId。 |
7366
7367**示例:**
7368
7369  ```ts
7370  class Stub extends rpc.RemoteObject {
7371      onRemoteMessageRequest(code, data, reply, option) {
7372          let callerTokenId = rpc.IPCSkeleton.getCallingTokenId();
7373          console.log("RpcServer: getCallingTokenId result: " + callerTokenId);
7374          return true;
7375      }
7376  }
7377  ```
7378
7379### getCallingDeviceID
7380
7381static getCallingDeviceID(): string
7382
7383静态方法,获取调用者进程所在的设备ID。
7384
7385**系统能力**:SystemCapability.Communication.IPC.Core
7386
7387**返回值:**
7388
7389  | 类型   | 说明                         |
7390  | ------ | ---------------------------- |
7391  | string | 返回调用者进程所在的设备ID。 |
7392
7393**示例:**
7394
7395  ```ts
7396  class Stub extends rpc.RemoteObject {
7397      onRemoteMessageRequest(code, data, reply, option) {
7398          let callerDeviceID = rpc.IPCSkeleton.getCallingDeviceID();
7399          console.log("RpcServer: callerDeviceID is: " + callerDeviceID);
7400          return true;
7401      }
7402  }
7403  ```
7404
7405### getLocalDeviceID
7406
7407static getLocalDeviceID(): string
7408
7409静态方法,获取本端设备ID。
7410
7411**系统能力**:SystemCapability.Communication.IPC.Core
7412
7413**返回值:**
7414
7415  | 类型   | 说明               |
7416  | ------ | ------------------ |
7417  | string | 返回本地设备的ID。 |
7418
7419**示例:**
7420
7421  ```ts
7422  class Stub extends rpc.RemoteObject {
7423      onRemoteMessageRequest(code, data, reply, option) {
7424          let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID();
7425          console.log("RpcServer: localDeviceID is: " + localDeviceID);
7426          return true;
7427      }
7428  }
7429  ```
7430
7431### isLocalCalling
7432
7433static isLocalCalling(): boolean
7434
7435静态方法,检查当前通信对端是否是本设备的进程。
7436
7437**系统能力**:SystemCapability.Communication.IPC.Core
7438
7439**返回值:**
7440
7441  | 类型    | 说明                                               |
7442  | ------- | -------------------------------------------------- |
7443  | boolean | true:调用在同一台设备,false:调用未在同一台设备。|
7444
7445**示例:**
7446
7447  ```ts
7448  class Stub extends rpc.RemoteObject {
7449      onRemoteMessageRequest(code, data, reply, option) {
7450          let isLocalCalling = rpc.IPCSkeleton.isLocalCalling();
7451          console.log("RpcServer: isLocalCalling is: " + isLocalCalling);
7452          return true;
7453      }
7454  }
7455  ```
7456
7457### flushCmdBuffer<sup>9+</sup>
7458
7459static flushCmdBuffer(object: IRemoteObject): void
7460
7461静态方法,将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。
7462
7463**系统能力**:SystemCapability.Communication.IPC.Core
7464
7465**参数:**
7466
7467  | 参数名 | 类型                            | 必填 | 说明                |
7468  | ------ | ------------------------------- | ---- | ------------------- |
7469  | object | [IRemoteObject](#iremoteobject) | 是   | 指定的RemoteProxy。 |
7470
7471**示例:**
7472
7473  ```ts
7474  class TestRemoteObject extends rpc.RemoteObject {
7475      constructor(descriptor) {
7476          super(descriptor);
7477      }
7478  }
7479  let remoteObject = new TestRemoteObject("aaa");
7480  try {
7481      rpc.IPCSkeleton.flushCmdBuffer(remoteObject);
7482  } catch(error) {
7483      console.info("proxy set calling identity fail, errorCode " + error.code);
7484      console.info("proxy set calling identity fail, errorMessage " + error.message);
7485  }
7486  ```
7487
7488### flushCommands<sup>(deprecated)</sup>
7489
7490>从API version 9 开始不再维护,建议使用[flushCmdBuffer](#flushcmdbuffer9)类替代。
7491
7492static flushCommands(object: IRemoteObject): number
7493
7494静态方法,将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。
7495
7496**系统能力**:SystemCapability.Communication.IPC.Core
7497
7498**参数:**
7499
7500  | 参数名 | 类型                            | 必填 | 说明                |
7501  | ------ | ------------------------------- | ---- | ------------------- |
7502  | object | [IRemoteObject](#iremoteobject) | 是   | 指定的RemoteProxy。 |
7503
7504**返回值:**
7505
7506  | 类型   | 说明                                                                              |
7507  | ------ | --------------------------------------------------------------------------------- |
7508  | number | 如果操作成功,返回0;如果输入对象为空或RemoteObject,或者操作失败,返回错误代码。 |
7509
7510**示例:**
7511
7512  ```ts
7513  class MyDeathRecipient {
7514      onRemoteDied() {
7515          console.log("server died");
7516      }
7517  }
7518  class TestRemoteObject extends rpc.RemoteObject {
7519      constructor(descriptor) {
7520          super(descriptor);
7521      }
7522      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7523          return true;
7524      }
7525      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7526          return true;
7527      }
7528      isObjectDead(): boolean {
7529          return false;
7530      }
7531  }
7532  let remoteObject = new TestRemoteObject("aaa");
7533  let ret = rpc.IPCSkeleton.flushCommands(remoteObject);
7534  console.log("RpcServer: flushCommands result: " + ret);
7535  ```
7536
7537### resetCallingIdentity
7538
7539static resetCallingIdentity(): string
7540
7541静态方法,将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。
7542
7543**系统能力**:SystemCapability.Communication.IPC.Core
7544
7545**返回值:**
7546
7547  | 类型   | 说明                                 |
7548  | ------ | ------------------------------------ |
7549  | string | 返回包含远程用户的UID和PID的字符串。 |
7550
7551**示例:**
7552
7553  ```ts
7554  class Stub extends rpc.RemoteObject {
7555      onRemoteMessageRequest(code, data, reply, option) {
7556          let callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
7557          console.log("RpcServer: callingIdentity is: " + callingIdentity);
7558          return true;
7559      }
7560  }
7561  ```
7562
7563### restoreCallingIdentity<sup>9+</sup>
7564
7565static restoreCallingIdentity(identity: string): void
7566
7567静态方法,将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。
7568
7569**系统能力**:SystemCapability.Communication.IPC.Core
7570
7571**参数:**
7572
7573  | 参数名   | 类型   | 必填 | 说明                                                               |
7574  | -------- | ------ | ---- | ------------------------------------------------------------------ |
7575  | identity | string | 是   | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |
7576
7577**示例:**
7578
7579  ```ts
7580  class Stub extends rpc.RemoteObject {
7581      onRemoteMessageRequest(code, data, reply, option) {
7582          let callingIdentity = null;
7583          try {
7584              callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
7585              console.log("RpcServer: callingIdentity is: " + callingIdentity);
7586          } finally {
7587              rpc.IPCSkeleton.restoreCallingIdentity("callingIdentity ");
7588          }
7589          return true;
7590      }
7591  }
7592  ```
7593
7594### setCallingIdentity<sup>(deprecated)</sup>
7595
7596>从API version 9 开始不再维护,建议使用[restoreCallingIdentity](#restorecallingidentity9)类替代。
7597
7598static setCallingIdentity(identity: string): boolean
7599
7600静态方法,将UID和PID恢复为远程用户的UID和PID。它通常在使用resetCallingIdentity后调用,需要resetCallingIdentity返回的远程用户的UID和PID。
7601
7602**系统能力**:SystemCapability.Communication.IPC.Core
7603
7604**参数:**
7605
7606  | 参数名   | 类型   | 必填 | 说明                                                               |
7607  | -------- | ------ | ---- | ------------------------------------------------------------------ |
7608  | identity | string | 是   | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |
7609
7610**返回值:**
7611
7612  | 类型    | 说明                             |
7613  | ------- | ---------------------------------|
7614  | boolean | true:设置成功,false:设置失败。|
7615
7616**示例:**
7617
7618  ```ts
7619  class Stub extends rpc.RemoteObject {
7620      onRemoteMessageRequest(code, data, reply, option) {
7621          let callingIdentity = null;
7622          try {
7623              callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
7624              console.log("RpcServer: callingIdentity is: " + callingIdentity);
7625          } finally {
7626              let ret = rpc.IPCSkeleton.setCallingIdentity("callingIdentity ");
7627              console.log("RpcServer: setCallingIdentity is: " + ret);
7628          }
7629          return true;
7630      }
7631  }
7632  ```
7633
7634## RemoteObject
7635
7636实现远程对象。服务提供者必须继承此类。
7637
7638### constructor
7639
7640constructor(descriptor: string)
7641
7642RemoteObject构造函数。
7643
7644**系统能力**:SystemCapability.Communication.IPC.Core
7645
7646**参数:**
7647
7648  | 参数名     | 类型   | 必填 | 说明         |
7649  | ---------- | ------ | ---- | ------------ |
7650  | descriptor | string | 是   | 接口描述符。 |
7651
7652### sendRequest<sup>(deprecated)</sup>
7653
7654>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
7655
7656sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
7657
7658以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
7659
7660**系统能力**:SystemCapability.Communication.IPC.Core
7661
7662**参数:**
7663
7664  | 参数名  | 类型                                      | 必填 | 说明                                                                                   |
7665  | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
7666  | code    | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7667  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
7668  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
7669  | options | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7670
7671**返回值:**
7672
7673  | 类型    | 说明                             |
7674  | ------- | -------------------------------- |
7675  | boolean | true:发送成功,false:发送失败。|
7676
7677**示例:**
7678
7679  ```ts
7680  class MyDeathRecipient {
7681      onRemoteDied() {
7682          console.log("server died");
7683      }
7684  }
7685  class TestRemoteObject extends rpc.RemoteObject {
7686      constructor(descriptor) {
7687          super(descriptor);
7688      }
7689      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7690          return true;
7691      }
7692      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7693          return true;
7694      }
7695      isObjectDead(): boolean {
7696          return false;
7697      }
7698  }
7699  let testRemoteObject = new TestRemoteObject("testObject");
7700  let option = new rpc.MessageOption();
7701  let data = rpc.MessageParcel.create();
7702  let reply = rpc.MessageParcel.create();
7703  data.writeInt(1);
7704  data.writeString("hello");
7705  let ret: boolean = testRemoteObject.sendRequest(1, data, reply, option);
7706  if (ret) {
7707      console.log("sendRequest got result");
7708      let msg = reply.readString();
7709      console.log("RPCTest: reply msg: " + msg);
7710  } else {
7711      console.log("RPCTest: sendRequest failed");
7712  }
7713  console.log("RPCTest: sendRequest ends, reclaim parcel");
7714  data.reclaim();
7715  reply.reclaim();
7716  ```
7717
7718### sendRequest<sup>8+(deprecated)</sup>
7719
7720>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
7721
7722sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise&lt;SendRequestResult&gt;
7723
7724以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
7725
7726**系统能力**:SystemCapability.Communication.IPC.Core
7727
7728**参数:**
7729
7730  | 参数名  | 类型                                      | 必填 | 说明                                                                                   |
7731  | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
7732  | code    | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7733  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
7734  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
7735  | options | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7736
7737**返回值:**
7738
7739  | 类型                             | 说明                                          |
7740  | -------------------------------- | --------------------------------------------- |
7741  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
7742
7743**示例:**
7744
7745  ```ts
7746  class MyDeathRecipient {
7747      onRemoteDied() {
7748          console.log("server died");
7749      }
7750  }
7751  class TestRemoteObject extends rpc.RemoteObject {
7752      constructor(descriptor) {
7753          super(descriptor);
7754      }
7755      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7756          return true;
7757      }
7758      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7759          return true;
7760      }
7761      isObjectDead(): boolean {
7762          return false;
7763      }
7764  }
7765  let testRemoteObject = new TestRemoteObject("testObject");
7766  let option = new rpc.MessageOption();
7767  let data = rpc.MessageParcel.create();
7768  let reply = rpc.MessageParcel.create();
7769  data.writeInt(1);
7770  data.writeString("hello");
7771  testRemoteObject.sendRequest(1, data, reply, option)
7772      .then(function(result) {
7773          if (result.errCode === 0) {
7774              console.log("sendRequest got result");
7775              result.reply.readException();
7776              let msg = result.reply.readString();
7777              console.log("RPCTest: reply msg: " + msg);
7778          } else {
7779              console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
7780          }
7781      }).catch(function(e) {
7782          console.log("RPCTest: sendRequest got exception: " + e.message);
7783      }).finally (() => {
7784          console.log("RPCTest: sendRequest ends, reclaim parcel");
7785          data.reclaim();
7786          reply.reclaim();
7787      });
7788  ```
7789
7790### sendMessageRequest<sup>9+</sup>
7791
7792sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise&lt;RequestResult&gt;
7793
7794以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。
7795
7796**系统能力**:SystemCapability.Communication.IPC.Core
7797
7798**参数:**
7799
7800  | 参数名  | 类型                                 | 必填 | 说明                                                                                   |
7801  | ------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- |
7802  | code    | number                               | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7803  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
7804  | reply   | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
7805  | options | [MessageOption](#messageoption)      | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7806
7807**返回值:**
7808
7809  | 类型                         | 说明                                          |
7810  | ---------------------------- | --------------------------------------------- |
7811  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是RequestResult实例。     |
7812
7813**示例:**
7814
7815  ```ts
7816  class TestRemoteObject extends rpc.RemoteObject {
7817      constructor(descriptor) {
7818          super(descriptor);
7819      }
7820  }
7821  let testRemoteObject = new TestRemoteObject("testObject");
7822  let option = new rpc.MessageOption();
7823  let data = rpc.MessageSequence.create();
7824  let reply = rpc.MessageSequence.create();
7825  data.writeInt(1);
7826  data.writeString("hello");
7827  testRemoteObject.sendMessageRequest(1, data, reply, option)
7828      .then(function(result) {
7829          if (result.errCode === 0) {
7830              console.log("sendMessageRequest got result");
7831              result.reply.readException();
7832              let msg = result.reply.readString();
7833              console.log("RPCTest: reply msg: " + msg);
7834          } else {
7835              console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
7836          }
7837      }).catch(function(e) {
7838          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
7839      }).finally (() => {
7840          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
7841          data.reclaim();
7842          reply.reclaim();
7843      });
7844  ```
7845
7846### sendMessageRequest<sup>9+</sup>
7847
7848sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void
7849
7850以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendMessageRequest返回时收到回调,回复内容在reply报文里。
7851
7852**系统能力**:SystemCapability.Communication.IPC.Core
7853
7854**参数:**
7855
7856  | 参数名        | 类型                                 | 必填 | 说明                                                                                   |
7857  | ------------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- |
7858  | code          | number                               | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7859  | data          | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
7860  | reply         | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
7861  | options       | [MessageOption](#messageoption)      | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7862  | AsyncCallback | AsyncCallback&lt;RequestResult&gt;   | 是   | 接收发送结果的回调。                                                                   |
7863
7864**示例:**
7865
7866  ```ts
7867  class TestRemoteObject extends rpc.RemoteObject {
7868      constructor(descriptor) {
7869          super(descriptor);
7870      }
7871  }
7872  function sendRequestCallback(result) {
7873      if (result.errCode === 0) {
7874          console.log("sendRequest got result");
7875          result.reply.readException();
7876          let msg = result.reply.readString();
7877          console.log("RPCTest: reply msg: " + msg);
7878      } else {
7879          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
7880      }
7881      console.log("RPCTest: sendRequest ends, reclaim parcel");
7882      result.data.reclaim();
7883      result.reply.reclaim();
7884  }
7885  let testRemoteObject = new TestRemoteObject("testObject");
7886  let option = new rpc.MessageOption();
7887  let data = rpc.MessageSequence.create();
7888  let reply = rpc.MessageSequence.create();
7889  data.writeInt(1);
7890  data.writeString("hello");
7891  testRemoteObject.sendMessageRequest(1, data, reply, option, sendRequestCallback);
7892  ```
7893
7894### sendRequest<sup>8+(deprecated)</sup>
7895
7896>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
7897
7898sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
7899
7900以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
7901
7902**系统能力**:SystemCapability.Communication.IPC.Core
7903
7904**参数:**
7905
7906  | 参数名        | 类型                                      | 必填 | 说明                                                                                   |
7907  | ------------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
7908  | code          | number                                    | 是   | 本次请求调用的消息码(1-16777215),由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7909  | data          | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
7910  | reply         | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
7911  | options       | [MessageOption](#messageoption)           | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7912  | AsyncCallback | AsyncCallback&lt;SendRequestResult&gt;    | 是   | 接收发送结果的回调。                                                                   |
7913
7914**示例:**
7915
7916  ```ts
7917  class MyDeathRecipient {
7918      onRemoteDied() {
7919          console.log("server died");
7920      }
7921  }
7922  class TestRemoteObject extends rpc.RemoteObject {
7923      constructor(descriptor) {
7924          super(descriptor);
7925      }
7926      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7927          return true;
7928      }
7929      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7930          return true;
7931      }
7932      isObjectDead(): boolean {
7933          return false;
7934      }
7935  }
7936  function sendRequestCallback(result) {
7937      if (result.errCode === 0) {
7938          console.log("sendRequest got result");
7939          result.reply.readException();
7940          let msg = result.reply.readString();
7941          console.log("RPCTest: reply msg: " + msg);
7942      } else {
7943          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
7944      }
7945      console.log("RPCTest: sendRequest ends, reclaim parcel");
7946      result.data.reclaim();
7947      result.reply.reclaim();
7948  }
7949  let testRemoteObject = new TestRemoteObject("testObject");
7950  let option = new rpc.MessageOption();
7951  let data = rpc.MessageParcel.create();
7952  let reply = rpc.MessageParcel.create();
7953  data.writeInt(1);
7954  data.writeString("hello");
7955  testRemoteObject.sendRequest(1, data, reply, option, sendRequestCallback);
7956  ```
7957
7958### onRemoteRequest<sup>8+(deprecated)</sup>
7959
7960>从API version 9 开始不再维护,建议使用[onRemoteMessageRequest](#onremotemessagerequest9)类替代。
7961
7962onRemoteRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
7963
7964sendMessageRequest请求的响应处理函数,服务端在该函数里处理请求,回复结果。
7965
7966**系统能力**:SystemCapability.Communication.IPC.Core
7967
7968**参数:**
7969
7970  | 参数名 | 类型                                      | 必填 | 说明                                    |
7971  | ------ | ----------------------------------------- | ---- | --------------------------------------- |
7972  | code   | number                                    | 是   | 对端发送的服务请求码。                  |
7973  | data   | [MessageParcel](#messageparceldeprecated) | 是   | 携带客户端调用参数的MessageParcel对象。 |
7974  | reply  | [MessageParcel](#messageparceldeprecated) | 是   | 写入结果的MessageParcel对象。           |
7975  | option | [MessageOption](#messageoption)           | 是   | 指示操作是同步还是异步。                |
7976
7977**返回值:**
7978
7979  | 类型    | 说明                             |
7980  | ------- | -------------------------------- |
7981  | boolean | true:操作成功,false:操作失败。|
7982
7983**示例:**
7984
7985  ```ts
7986  class MyDeathRecipient {
7987      onRemoteDied() {
7988          console.log("server died");
7989      }
7990  }
7991  class TestRemoteObject extends rpc.RemoteObject {
7992      constructor(descriptor) {
7993          super(descriptor);
7994      }
7995      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7996          return true;
7997      }
7998      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7999          return true;
8000      }
8001      isObjectDead(): boolean {
8002          return false;
8003      }
8004      onRemoteRequest(code, data, reply, option) {
8005          if (code === 1) {
8006              console.log("RpcServer: onRemoteRequest called");
8007              return true;
8008          } else {
8009              console.log("RpcServer: unknown code: " + code);
8010              return false;
8011          }
8012      }
8013  }
8014  ```
8015
8016### onRemoteMessageRequest<sup>9+</sup>
8017
8018onRemoteMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): boolean | Promise\<boolean>
8019
8020> **说明:**
8021>
8022>* 开发者应优先选择重载onRemoteMessageRequest方法,其中可以自由实现同步和异步的消息处理。
8023>* 开发者同时重载onRemoteRequest和onRemoteMessageRequest方法时,仅onRemoteMessageRequest方法生效。
8024
8025sendMessageRequest请求的响应处理函数,服务端在该函数里同步或异步地处理请求,回复结果。
8026
8027**系统能力**:SystemCapability.Communication.IPC.Core
8028
8029**参数:**
8030
8031  | 参数名 | 类型                                 | 必填 | 说明                                      |
8032  | ------ | ------------------------------------ | ---- | ----------------------------------------- |
8033  | code   | number                               | 是   | 对端发送的服务请求码。                    |
8034  | data   | [MessageSequence](#messagesequence9) | 是   | 携带客户端调用参数的MessageSequence对象。 |
8035  | reply  | [MessageSequence](#messagesequence9) | 是   | 写入结果的MessageSequence对象。           |
8036  | option | [MessageOption](#messageoption)      | 是   | 指示操作是同步还是异步。                  |
8037
8038**返回值:**
8039
8040  | 类型              | 说明                                                                                            |
8041  | ----------------- | ----------------------------------------------------------------------------------------------- |
8042  | boolean           | 若在onRemoteMessageRequest中同步地处理请求,则返回一个布尔值:true:操作成功,false:操作失败。 |
8043  | Promise\<boolean> | 若在onRemoteMessageRequest中异步地处理请求,则返回一个Promise对象。                                 |
8044
8045**重载onRemoteMessageRequest方法同步处理请求示例:**
8046
8047  ```ts
8048  class TestRemoteObject extends rpc.RemoteObject {
8049      constructor(descriptor) {
8050          super(descriptor);
8051      }
8052
8053      onRemoteMessageRequest(code, data, reply, option) {
8054          if (code === 1) {
8055              console.log("RpcServer: sync onRemoteMessageRequest is called");
8056              return true;
8057          } else {
8058              console.log("RpcServer: unknown code: " + code);
8059              return false;
8060          }
8061      }
8062  }
8063  ```
8064
8065  **重载onRemoteMessageRequest方法异步处理请求示例:**
8066
8067  ```ts
8068  class TestRemoteObject extends rpc.RemoteObject {
8069      constructor(descriptor) {
8070          super(descriptor);
8071      }
8072
8073      async onRemoteMessageRequest(code, data, reply, option) {
8074          if (code === 1) {
8075              console.log("RpcServer: async onRemoteMessageRequest is called");
8076          } else {
8077              console.log("RpcServer: unknown code: " + code);
8078              return false;
8079          }
8080          await new Promise((resolve) => {
8081            setTimeout(resolve, 100);
8082          })
8083          return true;
8084      }
8085  }
8086  ```
8087
8088**同时重载onRemoteMessageRequest和onRemoteRequest方法同步处理请求示例:**
8089
8090  ```ts
8091  class TestRemoteObject extends rpc.RemoteObject {
8092      constructor(descriptor) {
8093          super(descriptor);
8094      }
8095
8096      onRemoteRequest(code, data, reply, option) {
8097          if (code === 1) {
8098              console.log("RpcServer: sync onRemoteMessageRequest is called");
8099              return true;
8100          } else {
8101              console.log("RpcServer: unknown code: " + code);
8102              return false;
8103          }
8104      }
8105      // 同时调用仅会执行onRemoteMessageRequest
8106      onRemoteMessageRequest(code, data, reply, option) {
8107          if (code === 1) {
8108              console.log("RpcServer: async onRemoteMessageRequest is called");
8109          } else {
8110              console.log("RpcServer: unknown code: " + code);
8111              return false;
8112          }
8113
8114          return true;
8115      }
8116  }
8117  ```
8118
8119  **同时重载onRemoteMessageRequest和onRemoteRequest方法异步处理请求示例:**
8120
8121  ```ts
8122  class TestRemoteObject extends rpc.RemoteObject {
8123      constructor(descriptor) {
8124          super(descriptor);
8125      }
8126
8127      onRemoteRequest(code, data, reply, option) {
8128          if (code === 1) {
8129              console.log("RpcServer: sync onRemoteRequest is called");
8130              return true;
8131          } else {
8132              console.log("RpcServer: unknown code: " + code);
8133              return false;
8134          }
8135      }
8136      // 同时调用仅会执行onRemoteMessageRequest
8137      async onRemoteMessageRequest(code, data, reply, option) {
8138          if (code === 1) {
8139              console.log("RpcServer: async onRemoteMessageRequest is called");
8140          } else {
8141              console.log("RpcServer: unknown code: " + code);
8142              return false;
8143          }
8144         await new Promise((resolve) => {
8145            setTimeout(resolve, 100);
8146          })
8147          return true;
8148      }
8149  }
8150  ```
8151
8152### getCallingUid
8153
8154getCallingUid(): number
8155
8156获取通信对端的进程Uid。
8157
8158**系统能力**:SystemCapability.Communication.IPC.Core
8159
8160**返回值:**
8161  | 类型   | 说明                    |
8162  | ------ | ----------------------- |
8163  | number | 返回通信对端的进程Uid。 |
8164
8165**示例:**
8166
8167  ```ts
8168  class TestRemoteObject extends rpc.RemoteObject {
8169      constructor(descriptor) {
8170          super(descriptor);
8171      }
8172  }
8173  let testRemoteObject = new TestRemoteObject("testObject");
8174  console.log("RpcServer: getCallingUid: " + testRemoteObject.getCallingUid());
8175  ```
8176
8177### getCallingPid
8178
8179getCallingPid(): number
8180
8181获取通信对端的进程Pid。
8182
8183**系统能力**:SystemCapability.Communication.IPC.Core
8184
8185**返回值:**
8186
8187  | 类型   | 说明                    |
8188  | ------ | ----------------------- |
8189  | number | 返回通信对端的进程Pid。 |
8190
8191**示例:**
8192
8193  ```ts
8194  class TestRemoteObject extends rpc.RemoteObject {
8195      constructor(descriptor) {
8196          super(descriptor);
8197      }
8198  }
8199  let testRemoteObject = new TestRemoteObject("testObject");
8200  console.log("RpcServer: getCallingPid: " + testRemoteObject.getCallingPid());
8201  ```
8202
8203### getLocalInterface<sup>9+</sup>
8204
8205getLocalInterface(descriptor: string): IRemoteBroker
8206
8207查询接口描述符的字符串。
8208
8209**系统能力**:SystemCapability.Communication.IPC.Core
8210
8211**参数:**
8212
8213  | 参数名     | 类型   | 必填 | 说明                 |
8214  | ---------- | ------ | ---- | -------------------- |
8215  | descriptor | string | 是   | 接口描述符的字符串。 |
8216
8217**返回值:**
8218
8219  | 类型          | 说明                                          |
8220  | ------------- | --------------------------------------------- |
8221  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
8222
8223**示例:**
8224
8225  ```ts
8226  class MyDeathRecipient {
8227      onRemoteDied() {
8228          console.log("server died");
8229      }
8230  }
8231  class TestRemoteObject extends rpc.RemoteObject {
8232      constructor(descriptor) {
8233          super(descriptor);
8234      }
8235      registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8236          // 方法逻辑需开发者根据业务需要实现
8237      }
8238      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8239          // 方法逻辑需开发者根据业务需要实现
8240      }
8241      isObjectDead(): boolean {
8242          return false;
8243      }
8244  }
8245  let testRemoteObject = new TestRemoteObject("testObject");
8246  try {
8247      let broker = testRemoteObject.getLocalInterface("testObject");
8248  } catch(error) {
8249      console.info("rpc get local interface fail, errorCode " + error.code);
8250      console.info("rpc get local interface fail, errorMessage " + error.message);
8251  }
8252  ```
8253
8254### queryLocalInterface<sup>(deprecated)</sup>
8255
8256>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。
8257
8258queryLocalInterface(descriptor: string): IRemoteBroker
8259
8260查询并获取当前接口描述符对应的远端对象是否已经存在。
8261
8262**系统能力**:SystemCapability.Communication.IPC.Core
8263
8264**参数:**
8265
8266  | 参数名     | 类型   | 必填 | 说明                   |
8267  | ---------- | ------ | ---- | ---------------------- |
8268  | descriptor | string | 是   | 需要查询的接口描述符。 |
8269
8270**返回值:**
8271
8272  | 类型          | 说明                                                               |
8273  | ------------- | ------------------------------------------------------------------ |
8274  | IRemoteBroker | 如果接口描述符对应的远端对象存在,则返回该远端对象,否则返回Null。 |
8275
8276**示例:**
8277
8278  ```ts
8279  class MyDeathRecipient {
8280      onRemoteDied() {
8281          console.log("server died");
8282      }
8283  }
8284  class TestRemoteObject extends rpc.RemoteObject {
8285      constructor(descriptor) {
8286          super(descriptor);
8287      }
8288      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8289          return true;
8290      }
8291      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8292          return true;
8293      }
8294      isObjectDead(): boolean {
8295          return false;
8296      }
8297  }
8298  let testRemoteObject = new TestRemoteObject("testObject");
8299  let broker = testRemoteObject.queryLocalInterface("testObject");
8300  ```
8301
8302### getDescriptor<sup>9+</sup>
8303
8304getDescriptor(): string
8305
8306获取对象的接口描述符。接口描述符为字符串。
8307
8308**系统能力**:SystemCapability.Communication.IPC.Core
8309
8310**返回值:**
8311
8312  | 类型   | 说明             |
8313  | ------ | ---------------- |
8314  | string | 返回接口描述符。 |
8315
8316**错误码:**
8317
8318以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8319
8320  | 错误码ID | 错误信息 |
8321  | -------- | -------- |
8322  | 1900008  | proxy or remote object is invalid |
8323
8324**示例:**
8325
8326  ```ts
8327  class MyDeathRecipient {
8328      onRemoteDied() {
8329          console.log("server died");
8330      }
8331  }
8332  class TestRemoteObject extends rpc.RemoteObject {
8333      constructor(descriptor) {
8334          super(descriptor);
8335      }
8336      registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8337          // 方法逻辑需开发者根据业务需要实现
8338      }
8339      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8340          // 方法逻辑需开发者根据业务需要实现
8341      }
8342      isObjectDead(): boolean {
8343          return false;
8344      }
8345  }
8346  let testRemoteObject = new TestRemoteObject("testObject");
8347  console.log("RpcServer: descriptor is: " + descriptor);
8348  try {
8349      let descriptor = testRemoteObject.getDescriptor();
8350  } catch(error) {
8351      console.info("rpc get local interface fail, errorCode " + error.code);
8352      console.info("rpc get local interface fail, errorMessage " + error.message);
8353  }
8354  ```
8355
8356### getInterfaceDescriptor<sup>(deprecated)</sup>
8357
8358>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。
8359
8360getInterfaceDescriptor(): string
8361
8362查询接口描述符。
8363
8364**系统能力**:SystemCapability.Communication.IPC.Core
8365
8366**返回值:**
8367
8368  | 类型   | 说明             |
8369  | ------ | ---------------- |
8370  | string | 返回接口描述符。 |
8371
8372**示例:**
8373
8374  ```ts
8375  class MyDeathRecipient {
8376      onRemoteDied() {
8377          console.log("server died");
8378      }
8379  }
8380  class TestRemoteObject extends rpc.RemoteObject {
8381      constructor(descriptor) {
8382          super(descriptor);
8383      }
8384      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8385          return true;
8386      }
8387      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8388          return true;
8389      }
8390      isObjectDead(): boolean {
8391          return false;
8392      }
8393  }
8394  let testRemoteObject = new TestRemoteObject("testObject");
8395  let descriptor = testRemoteObject.getInterfaceDescriptor();
8396  console.log("RpcServer: descriptor is: " + descriptor);
8397  ```
8398
8399### modifyLocalInterface<sup>9+</sup>
8400
8401modifyLocalInterface(localInterface: IRemoteBroker, descriptor: string): void
8402
8403此接口用于把接口描述符和IRemoteBroker对象绑定。
8404
8405**系统能力**:SystemCapability.Communication.IPC.Core
8406
8407**参数:**
8408
8409  | 参数名         | 类型          | 必填 | 说明                                  |
8410  | -------------- | ------------- | ---- | ------------------------------------- |
8411  | localInterface | IRemoteBroker | 是   | 将与描述符绑定的IRemoteBroker对象。   |
8412  | descriptor     | string        | 是   | 用于与IRemoteBroker对象绑定的描述符。 |
8413
8414**示例:**
8415
8416  ```ts
8417  class MyDeathRecipient {
8418      onRemoteDied() {
8419          console.log("server died");
8420      }
8421  }
8422  class TestRemoteObject extends rpc.RemoteObject {
8423      constructor(descriptor) {
8424          super(descriptor);
8425          try {
8426              this.modifyLocalInterface(this, descriptor);
8427          } catch(error) {
8428              console.info(" rpc attach local interface fail, errorCode " + error.code);
8429              console.info(" rpc attach local interface fail, errorMessage " + error.message);
8430          }
8431      }
8432      registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8433          // 方法逻辑需开发者根据业务需要实现
8434      }
8435      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8436          // 方法逻辑需开发者根据业务需要实现
8437      }
8438      isObjectDead(): boolean {
8439          return false;
8440      }
8441      asObject(): rpc.IRemoteObject {
8442          return this;
8443      }
8444  }
8445  let testRemoteObject = new TestRemoteObject("testObject");
8446  ```
8447
8448### attachLocalInterface<sup>(deprecated)</sup>
8449
8450>从API version 9 开始不再维护,建议使用[modifyLocalInterface](#modifylocalinterface9)类替代。
8451
8452attachLocalInterface(localInterface: IRemoteBroker, descriptor: string): void
8453
8454此接口用于把接口描述符和IRemoteBroker对象绑定。
8455
8456**系统能力**:SystemCapability.Communication.IPC.Core
8457
8458**参数:**
8459
8460  | 参数名         | 类型          | 必填 | 说明                                  |
8461  | -------------- | ------------- | ---- | ------------------------------------- |
8462  | localInterface | IRemoteBroker | 是   | 将与描述符绑定的IRemoteBroker对象。   |
8463  | descriptor     | string        | 是   | 用于与IRemoteBroker对象绑定的描述符。 |
8464
8465**示例:**
8466
8467  ```ts
8468  class MyDeathRecipient {
8469      onRemoteDied() {
8470          console.log("server died");
8471      }
8472  }
8473  class TestRemoteObject extends rpc.RemoteObject {
8474      constructor(descriptor) {
8475          super(descriptor);
8476          this.attachLocalInterface(this, descriptor);
8477      }
8478      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8479          return true;
8480      }
8481      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8482          return true;
8483      }
8484      isObjectDead(): boolean {
8485          return false;
8486      }
8487      asObject(): rpc.IRemoteObject {
8488          return this;
8489      }
8490  }
8491  let testRemoteObject = new TestRemoteObject("testObject");
8492  ```
8493
8494## Ashmem<sup>8+</sup>
8495
8496提供与匿名共享内存对象相关的方法,包括创建、关闭、映射和取消映射Ashmem、从Ashmem读取数据和写入数据、获取Ashmem大小、设置Ashmem保护。
8497
8498**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core8499
8500映射内存保护类型:
8501
8502  | 名称       | 值  | 说明               |
8503  | ---------- | --- | ------------------ |
8504  | PROT_EXEC  | 4   | 映射的内存可执行   |
8505  | PROT_NONE  | 0   | 映射的内存不可访问 |
8506  | PROT_READ  | 1   | 映射的内存可读     |
8507  | PROT_WRITE | 2   | 映射的内存可写     |
8508
8509### create<sup>9+</sup>
8510
8511static create(name: string, size: number): Ashmem
8512
8513静态方法,根据指定的名称和大小创建Ashmem对象。
8514
8515**系统能力**:SystemCapability.Communication.IPC.Core
8516
8517**参数:**
8518
8519  | 参数名 | 类型   | 必填 | 说明                         |
8520  | ------ | ------ | ---- | ---------------------------- |
8521  | name   | string | 是   | 名称,用于查询Ashmem信息。   |
8522  | size   | number | 是   | Ashmem的大小,以字节为单位。 |
8523
8524**返回值:**
8525
8526  | 类型   | 说明                                           |
8527  | ------ | ---------------------------------------------- |
8528  | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
8529
8530**示例:**
8531
8532  ```ts
8533  let ashmem;
8534  try {
8535      ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8536  } catch(error) {
8537      console.info("Rpc creat ashmem fail, errorCode " + error.code);
8538      console.info("Rpc creat ashmem  fail, errorMessage " + error.message);
8539  }
8540  let size = ashmem.getAshmemSize();
8541  console.log("RpcTest: get ashemm by create : " + ashmem + " size is : " + size);
8542  ```
8543
8544### createAshmem<sup>8+(deprecated)</sup>
8545
8546>从API version 9 开始不再维护,建议使用[create](#create9)类替代。
8547
8548static createAshmem(name: string, size: number): Ashmem
8549
8550静态方法,根据指定的名称和大小创建Ashmem对象。
8551
8552**系统能力**:SystemCapability.Communication.IPC.Core
8553
8554**参数:**
8555
8556  | 参数名 | 类型   | 必填 | 说明                         |
8557  | ------ | ------ | ---- | ---------------------------- |
8558  | name   | string | 是   | 名称,用于查询Ashmem信息。   |
8559  | size   | number | 是   | Ashmem的大小,以字节为单位。 |
8560
8561**返回值:**
8562
8563  | 类型   | 说明                                           |
8564  | ------ | ---------------------------------------------- |
8565  | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
8566
8567**示例:**
8568
8569  ```ts
8570  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8571  let size = ashmem.getAshmemSize();
8572  console.log("RpcTest: get ashemm by createAshmem : " + ashmem + " size is : " + size);
8573  ```
8574
8575### create<sup>9+</sup>
8576
8577static create(ashmem: Ashmem): Ashmem
8578
8579静态方法,通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。
8580
8581**系统能力**:SystemCapability.Communication.IPC.Core
8582
8583**参数:**
8584
8585  | 参数名 | 类型   | 必填 | 说明                 |
8586  | ------ | ------ | ---- | -------------------- |
8587  | ashmem | Ashmem | 是   | 已存在的Ashmem对象。 |
8588
8589**返回值:**
8590
8591  | 类型   | 说明                   |
8592  | ------ | ---------------------- |
8593  | Ashmem | 返回创建的Ashmem对象。 |
8594
8595**示例:**
8596
8597  ```ts
8598  let ashmem2;
8599  try {
8600      let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8601      let ashmem2 = rpc.Ashmem.create(ashmem);
8602  } catch(error) {
8603      console.info("Rpc creat ashmem from existing fail, errorCode " + error.code);
8604      console.info("Rpc creat ashmem from existing  fail, errorMessage " + error.message);
8605  }
8606  let size = ashmem2.getAshmemSize();
8607  console.log("RpcTest: get ashemm by create : " + ashmem2 + " size is : " + size);
8608  ```
8609
8610### createAshmemFromExisting<sup>8+(deprecated)</sup>
8611
8612>从API version 9 开始不再维护,建议使用[create](#create9)类替代。
8613
8614static createAshmemFromExisting(ashmem: Ashmem): Ashmem
8615
8616静态方法,通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。
8617
8618**系统能力**:SystemCapability.Communication.IPC.Core
8619
8620**参数:**
8621
8622  | 参数名 | 类型   | 必填 | 说明                 |
8623  | ------ | ------ | ---- | -------------------- |
8624  | ashmem | Ashmem | 是   | 已存在的Ashmem对象。 |
8625
8626**返回值:**
8627
8628  | 类型   | 说明                   |
8629  | ------ | ---------------------- |
8630  | Ashmem | 返回创建的Ashmem对象。 |
8631
8632**示例:**
8633
8634  ```ts
8635  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8636  let ashmem2 = rpc.Ashmem.createAshmemFromExisting(ashmem);
8637  let size = ashmem2.getAshmemSize();
8638  console.log("RpcTest: get ashemm by createAshmemFromExisting : " + ashmem2 + " size is : " + size);
8639  ```
8640
8641### closeAshmem<sup>8+</sup>
8642
8643closeAshmem(): void
8644
8645关闭这个Ashmem。
8646
8647**系统能力**:SystemCapability.Communication.IPC.Core
8648
8649**示例:**
8650
8651  ```ts
8652  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8653  ashmem.closeAshmem();
8654  ```
8655
8656### unmapAshmem<sup>8+</sup>
8657
8658unmapAshmem(): void
8659
8660删除该Ashmem对象的地址映射。
8661
8662**系统能力**:SystemCapability.Communication.IPC.Core
8663
8664**示例:**
8665
8666  ```ts
8667  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8668  ashmem.unmapAshmem();
8669  ```
8670
8671### getAshmemSize<sup>8+</sup>
8672
8673getAshmemSize(): number
8674
8675获取Ashmem对象的内存大小。
8676
8677**系统能力**:SystemCapability.Communication.IPC.Core
8678
8679**返回值:**
8680
8681  | 类型   | 说明                       |
8682  | ------ | -------------------------- |
8683  | number | 返回Ashmem对象的内存大小。 |
8684
8685**示例:**
8686
8687  ```ts
8688  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8689  let size = ashmem.getAshmemSize();
8690  console.log("RpcTest: get ashmem is " + ashmem + " size is : " + size);
8691  ```
8692
8693### mapTypedAshmem<sup>9+</sup>
8694
8695mapTypedAshmem(mapType: number): void
8696
8697在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。
8698
8699**系统能力**:SystemCapability.Communication.IPC.Core
8700
8701**参数:**
8702
8703  | 参数名  | 类型   | 必填 | 说明                           |
8704  | ------- | ------ | ---- | ------------------------------ |
8705  | mapType | number | 是   | 指定映射的内存区域的保护等级。 |
8706
8707**错误码:**
8708
8709以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8710
8711  | 错误码ID | 错误信息 |
8712  | -------- | -------- |
8713  | 1900001  | call mmap function failed |
8714
8715**示例:**
8716
8717  ```ts
8718  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8719  try {
8720      ashmem.mapTypedAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
8721  } catch(error) {
8722      console.info("Rpc map ashmem fail, errorCode " + error.code);
8723      console.info("Rpc map ashmem fail, errorMessage " + error.message);
8724  }
8725  ```
8726
8727### mapAshmem<sup>8+(deprecated)</sup>
8728
8729>从API version 9 开始不再维护,建议使用[mapTypedAshmem](#maptypedashmem9)类替代。
8730
8731mapAshmem(mapType: number): boolean
8732
8733在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。
8734
8735**系统能力**:SystemCapability.Communication.IPC.Core
8736
8737**参数:**
8738
8739  | 参数名  | 类型   | 必填 | 说明                           |
8740  | ------- | ------ | ---- | ------------------------------ |
8741  | mapType | number | 是   | 指定映射的内存区域的保护等级。 |
8742
8743**返回值:**
8744
8745  | 类型    | 说明                             |
8746  | ------- | -------------------------------- |
8747  | boolean | true:映射成功,false:映射失败。|
8748
8749**示例:**
8750
8751  ```ts
8752  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8753  let mapReadAndWrite = ashmem.mapAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
8754  console.log("RpcTest: map ashmem result is  : " + mapReadAndWrite);
8755  ```
8756
8757### mapReadWriteAshmem<sup>9+</sup>
8758
8759mapReadWriteAshmem(): void
8760
8761在此进程虚拟地址空间上创建可读写的共享文件映射。
8762
8763**系统能力**:SystemCapability.Communication.IPC.Core
8764
8765**错误码:**
8766
8767以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8768
8769  | 错误码ID | 错误信息 |
8770  | -------- | -------- |
8771  | 1900001  | call mmap function failed |
8772
8773**示例:**
8774
8775  ```ts
8776  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8777  try {
8778      ashmem.mapReadWriteAshmem();
8779  } catch(error) {
8780      console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
8781      console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
8782  }
8783  ```
8784
8785### mapReadAndWriteAshmem<sup>8+(deprecated)</sup>
8786
8787>从API version 9 开始不再维护,建议使用[mapReadWriteAshmem](#mapreadwriteashmem9)类替代。
8788
8789mapReadAndWriteAshmem(): boolean
8790
8791在此进程虚拟地址空间上创建可读写的共享文件映射。
8792
8793**系统能力**:SystemCapability.Communication.IPC.Core
8794
8795**返回值:**
8796
8797  | 类型    | 说明                             |
8798  | ------- | -------------------------------- |
8799  | boolean | true:映射成功,false:映射失败。|
8800
8801**示例:**
8802
8803  ```ts
8804  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8805  let mapResult = ashmem.mapReadAndWriteAshmem();
8806  console.log("RpcTest: map ashmem result is  : " + mapResult);
8807  ```
8808
8809### mapReadonlyAshmem<sup>9+</sup>
8810
8811mapReadonlyAshmem(): void
8812
8813在此进程虚拟地址空间上创建只读的共享文件映射。
8814
8815**系统能力**:SystemCapability.Communication.IPC.Core
8816
8817**错误码:**
8818
8819以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8820
8821  | 错误码ID | 错误信息 |
8822  | -------- | -------- |
8823  | 1900001  | call mmap function failed |
8824
8825**示例:**
8826
8827  ```ts
8828  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8829  try {
8830      ashmem.mapReadonlyAshmem();
8831  } catch(error) {
8832      console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
8833      console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
8834  }
8835  ```
8836
8837### mapReadOnlyAshmem<sup>8+(deprecated)</sup>
8838
8839>从API version 9 开始不再维护,建议使用[mapReadonlyAshmem](#mapreadonlyashmem9)类替代。
8840
8841mapReadOnlyAshmem(): boolean
8842
8843在此进程虚拟地址空间上创建只读的共享文件映射。
8844
8845**系统能力**:SystemCapability.Communication.IPC.Core
8846
8847**返回值:**
8848
8849  | 类型    | 说明                             |
8850  | ------- | -------------------------------- |
8851  | boolean | true:映射成功,false:映射失败。|
8852
8853**示例:**
8854
8855  ```ts
8856  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8857  let mapResult = ashmem.mapReadOnlyAshmem();
8858  console.log("RpcTest: Ashmem mapReadOnlyAshmem result is : " + mapResult);
8859  ```
8860
8861### setProtectionType<sup>9+</sup>
8862
8863setProtectionType(protectionType: number): void
8864
8865设置映射内存区域的保护等级。
8866
8867**系统能力**:SystemCapability.Communication.IPC.Core
8868
8869**参数:**
8870
8871  | 参数名         | 类型   | 必填 | 说明               |
8872  | -------------- | ------ | ---- | ------------------ |
8873  | protectionType | number | 是   | 要设置的保护类型。 |
8874
8875**错误码:**
8876
8877以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8878
8879  | 错误码ID | 错误信息 |
8880  | -------- | -------- |
8881  | 1900002  | call os ioctl function failed |
8882
8883**示例:**
8884
8885  ```ts
8886  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8887  try {
8888      ashmem.setProtection(ashmem.PROT_READ);
8889  } catch(error) {
8890      console.info("Rpc set protection type fail, errorCode " + error.code);
8891      console.info("Rpc set protection type fail, errorMessage " + error.message);
8892  }
8893  ```
8894
8895### setProtection<sup>8+(deprecated)</sup>
8896
8897>从API version 9 开始不再维护,建议使用[setProtectionType](#setprotectiontype9)类替代。
8898
8899setProtection(protectionType: number): boolean
8900
8901设置映射内存区域的保护等级。
8902
8903**系统能力**:SystemCapability.Communication.IPC.Core
8904
8905**参数:**
8906
8907  | 参数名         | 类型   | 必填 | 说明               |
8908  | -------------- | ------ | ---- | ------------------ |
8909  | protectionType | number | 是   | 要设置的保护类型。 |
8910
8911**返回值:**
8912
8913  | 类型    | 说明                             |
8914  | ------- | -------------------------------- |
8915  | boolean | true:设置成功,false:设置失败。|
8916
8917**示例:**
8918
8919  ```ts
8920  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8921  let result = ashmem.setProtection(ashmem.PROT_READ);
8922  console.log("RpcTest: Ashmem setProtection result is : " + result);
8923  ```
8924
8925### writeAshmem<sup>9+</sup>
8926
8927writeAshmem(buf: number[], size: number, offset: number): void
8928
8929将数据写入此Ashmem对象关联的共享文件。
8930
8931**系统能力**:SystemCapability.Communication.IPC.Core
8932
8933**参数:**
8934
8935  | 参数名 | 类型     | 必填 | 说明                                               |
8936  | ------ | -------- | ---- | -------------------------------------------------- |
8937  | buf    | number[] | 是   | 写入Ashmem对象的数据。                             |
8938  | size   | number   | 是   | 要写入的数据大小。                                 |
8939  | offset | number   | 是   | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |
8940
8941**错误码:**
8942
8943以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8944
8945  | 错误码ID | 错误信息 |
8946  | -------- | -------- |
8947  | 1900003  | write to ashmem failed |
8948
8949**示例:**
8950
8951  ```ts
8952  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8953  ashmem.mapReadWriteAshmem();
8954  var ByteArrayVar = [1, 2, 3, 4, 5];
8955  try {
8956      ashmem.writeAshmem(ByteArrayVar, 5, 0);
8957  } catch(error) {
8958      console.info("Rpc write to ashmem fail, errorCode " + error.code);
8959      console.info("Rpc write to ashmem fail, errorMessage " + error.message);
8960  }
8961  ```
8962
8963### writeToAshmem<sup>8+(deprecated)</sup>
8964
8965>从API version 9 开始不再维护,建议使用[writeAshmem](#writeashmem9)类替代。
8966
8967writeToAshmem(buf: number[], size: number, offset: number): boolean
8968
8969将数据写入此Ashmem对象关联的共享文件。
8970
8971**系统能力**:SystemCapability.Communication.IPC.Core
8972
8973**参数:**
8974
8975  | 参数名 | 类型     | 必填 | 说明                                               |
8976  | ------ | -------- | ---- | -------------------------------------------------- |
8977  | buf    | number[] | 是   | 写入Ashmem对象的数据。                             |
8978  | size   | number   | 是   | 要写入的数据大小。                                 |
8979  | offset | number   | 是   | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |
8980
8981**返回值:**
8982
8983  | 类型    | 说明                                                                          |
8984  | ------- | ----------------------------------------------------------------------------- |
8985  | boolean | true:如果数据写入成功,false:在其他情况下,如数据写入越界或未获得写入权限。 |
8986
8987**示例:**
8988
8989  ```ts
8990  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8991  let mapResult = ashmem.mapReadAndWriteAshmem();
8992  console.info("RpcTest map ashmem result is " + mapResult);
8993  var ByteArrayVar = [1, 2, 3, 4, 5];
8994  let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
8995  console.log("RpcTest: write to Ashmem result is  : " + writeResult);
8996  ```
8997
8998### readAshmem<sup>9+</sup>
8999
9000readAshmem(size: number, offset: number): number[]
9001
9002从此Ashmem对象关联的共享文件中读取数据。
9003
9004**系统能力**:SystemCapability.Communication.IPC.Core
9005
9006**参数:**
9007
9008  | 参数名 | 类型   | 必填 | 说明                                               |
9009  | ------ | ------ | ---- | -------------------------------------------------- |
9010  | size   | number | 是   | 要读取的数据的大小。                               |
9011  | offset | number | 是   | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |
9012
9013**返回值:**
9014
9015  | 类型     | 说明             |
9016  | -------- | ---------------- |
9017  | number[] | 返回读取的数据。 |
9018
9019**错误码:**
9020
9021以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
9022
9023  | 错误码ID | 错误信息 |
9024  | -------- | -------- |
9025  | 1900004  | read from ashmem failed |
9026
9027**示例:**
9028
9029  ```ts
9030  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
9031  ashmem.mapReadWriteAshmem();
9032  var ByteArrayVar = [1, 2, 3, 4, 5];
9033  ashmem.writeAshmem(ByteArrayVar, 5, 0);
9034  try {
9035      let readResult = ashmem.readAshmem(5, 0);
9036      console.log("RpcTest: read from Ashmem result is  : " + readResult);
9037  } catch(error) {
9038      console.info("Rpc read from ashmem fail, errorCode " + error.code);
9039      console.info("Rpc read from ashmem fail, errorMessage " + error.message);
9040  }
9041  ```
9042
9043### readFromAshmem<sup>8+(deprecated)</sup>
9044
9045>从API version 9 开始不再维护,建议使用[readAshmem](#readashmem9)类替代。
9046
9047readFromAshmem(size: number, offset: number): number[]
9048
9049从此Ashmem对象关联的共享文件中读取数据。
9050
9051**系统能力**:SystemCapability.Communication.IPC.Core
9052
9053**参数:**
9054
9055  | 参数名 | 类型   | 必填 | 说明                                               |
9056  | ------ | ------ | ---- | -------------------------------------------------- |
9057  | size   | number | 是   | 要读取的数据的大小。                               |
9058  | offset | number | 是   | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |
9059
9060**返回值:**
9061
9062  | 类型     | 说明             |
9063  | -------- | ---------------- |
9064  | number[] | 返回读取的数据。 |
9065
9066**示例:**
9067
9068 ``` ts
9069  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
9070  let mapResult = ashmem.mapReadAndWriteAshmem();
9071  console.info("RpcTest map ashmem result is " + mapResult);
9072  var ByteArrayVar = [1, 2, 3, 4, 5];
9073  let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
9074  console.log("RpcTest: write to Ashmem result is  : " + writeResult);
9075  let readResult = ashmem.readFromAshmem(5, 0);
9076  console.log("RpcTest: read to Ashmem result is  : " + readResult);
9077 ```
9078
9079## 获取context
9080
9081**示例:**
9082
9083 ```ts
9084  import Ability from '@ohos.app.ability.UIAbility';
9085
9086  export default class MainAbility extends Ability {
9087      onCreate(want, launchParam) {
9088          console.log("[Demo] MainAbility onCreate");
9089          globalThis.context = this.context;
9090      }
9091      onDestroy() {
9092          console.log("[Demo] MainAbility onDestroy");
9093      }
9094      onWindowStageCreate(windowStage) {
9095          // Main window is created, set main page for this ability
9096          console.log("[Demo] MainAbility onWindowStageCreate");
9097      }
9098      onWindowStageDestroy() {
9099          // Main window is destroyed, release UI related resources
9100          console.log("[Demo] MainAbility onWindowStageDestroy");
9101      }
9102      onForeground() {
9103          // Ability has brought to foreground
9104          console.log("[Demo] MainAbility onForeground");
9105      }
9106      onBackground() {
9107          // Ability has back to background
9108          console.log("[Demo] MainAbility onBackground");
9109      }
9110  };
9111 ```
9112
9113