• 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  获取服务
2395
2396  ```ts
2397  import FA from "@ohos.ability.featureAbility";
2398  let proxy;
2399  let connect = {
2400      onConnect: function(elementName, remoteProxy) {
2401          console.log("RpcClient: js onConnect called.");
2402          proxy = remoteProxy;
2403      },
2404      onDisconnect: function(elementName) {
2405          console.log("RpcClient: onDisconnect");
2406      },
2407      onFailed: function() {
2408          console.log("RpcClient: onFailed");
2409      }
2410  };
2411  let want = {
2412      "bundleName": "com.ohos.server",
2413      "abilityName": "com.ohos.server.MainAbility",
2414  };
2415  FA.connectAbility(want, connect);
2416  ```
2417
2418  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息
2419
2420  ```ts
2421  let option = new rpc.MessageOption();
2422  let data = rpc.MessageSequence.create();
2423  let reply = rpc.MessageSequence.create();
2424  data.writeInt(1);
2425  data.writeString("hello");
2426  proxy.sendMessageRequest(1, data, reply, option)
2427      .then(function(errCode) {
2428          if (errCode === 0) {
2429              console.log("sendMessageRequest got result");
2430              try {
2431                  reply.readException();
2432              } catch(error) {
2433                  console.info("rpc read exception fail, errorCode " + error.code);
2434                  console.info("rpc read no exception fail, errorMessage" + error.message);
2435              }
2436              let msg = reply.readString();
2437              console.log("RPCTest: reply msg: " + msg);
2438          } else {
2439              console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode);
2440          }
2441      }).catch(function(e) {
2442          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
2443      }).finally (() => {
2444          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
2445          data.reclaim();
2446          reply.reclaim();
2447      });
2448  ```
2449
2450### writeParcelableArray
2451
2452writeParcelableArray(parcelableArray: Parcelable[]): void
2453
2454将可序列化对象数组写入MessageSequence实例。
2455
2456**系统能力**:SystemCapability.Communication.IPC.Core
2457
2458**参数:**
2459
2460  | 参数名          | 类型         | 必填 | 说明                       |
2461  | --------------- | ------------ | ---- | -------------------------- |
2462  | parcelableArray | Parcelable[] | 是   | 要写入的可序列化对象数组。 |
2463
2464**错误码:**
2465
2466以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2467
2468  | 错误码ID | 错误信息 |
2469  | ------- | -------- |
2470  | 1900009 | write data to message sequence failed |
2471
2472**示例:**
2473
2474  ```ts
2475  class MyParcelable {
2476      num: number;
2477      str: string;
2478      constructor(num, str) {
2479          this.num = num;
2480          this.str = str;
2481      }
2482      marshalling(messageSequence) {
2483          messageSequence.writeInt(this.num);
2484          messageSequence.writeString(this.str);
2485          return true;
2486      }
2487      unmarshalling(messageSequence) {
2488          this.num = messageSequence.readInt();
2489          this.str = messageSequence.readString();
2490          return true;
2491      }
2492  }
2493  let parcelable = new MyParcelable(1, "aaa");
2494  let parcelable2 = new MyParcelable(2, "bbb");
2495  let parcelable3 = new MyParcelable(3, "ccc");
2496  let a = [parcelable, parcelable2, parcelable3];
2497  let data = rpc.MessageSequence.create();
2498  try {
2499      data.writeParcelableArray(a);
2500  } catch(error) {
2501      console.info("rpc write parcelable array fail, errorCode " + error.code);
2502      console.info("rpc write parcelable array fail, errorMessage" + error.message);
2503  }
2504  ```
2505
2506### readParcelableArray
2507
2508readParcelableArray(parcelableArray: Parcelable[]): void
2509
2510从MessageSequence实例读取可序列化对象数组。
2511
2512**系统能力**:SystemCapability.Communication.IPC.Core
2513
2514**参数:**
2515
2516  | 参数名          | 类型         | 必填 | 说明                       |
2517  | --------------- | ------------ | ---- | -------------------------- |
2518  | parcelableArray | Parcelable[] | 是   | 要读取的可序列化对象数组。 |
2519
2520**错误码:**
2521
2522以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2523
2524  | 错误码ID | 错误信息 |
2525  | ------- | -------- |
2526  | 1900010 | read data from message sequence failed |
2527  | 1900012 | call js callback function failed |
2528
2529**示例:**
2530
2531  ```ts
2532  class MyParcelable {
2533      num: number;
2534      str: string;
2535      constructor(num, str) {
2536          this.num = num;
2537          this.str = str;
2538      }
2539      marshalling(messageSequence) {
2540          messageSequence.writeInt(this.num);
2541          messageSequence.writeString(this.str);
2542          return true;
2543      }
2544      unmarshalling(messageSequence) {
2545          this.num = messageSequence.readInt();
2546          this.str = messageSequence.readString();
2547          return true;
2548      }
2549  }
2550  let parcelable = new MyParcelable(1, "aaa");
2551  let parcelable2 = new MyParcelable(2, "bbb");
2552  let parcelable3 = new MyParcelable(3, "ccc");
2553  let a = [parcelable, parcelable2, parcelable3];
2554  let data = rpc.MessageSequence.create();
2555  let result = data.writeParcelableArray(a);
2556  console.log("RpcClient: writeParcelableArray is " + result);
2557  let b = [new MyParcelable(0, ""), new MyParcelable(0, ""), new MyParcelable(0, "")];
2558  try {
2559      data.readParcelableArray(b);
2560  } catch(error) {
2561      console.info("rpc read parcelable array fail, errorCode " + error.code);
2562      console.info("rpc read parcelable array fail, errorMessage" + error.message);
2563  }
2564  data.readParcelableArray(b);
2565  ```
2566
2567### writeRemoteObjectArray
2568
2569writeRemoteObjectArray(objectArray: IRemoteObject[]): void
2570
2571将IRemoteObject对象数组写入MessageSequence。
2572
2573**系统能力**:SystemCapability.Communication.IPC.Core
2574
2575**参数:**
2576
2577  | 参数名      | 类型            | 必填 | 说明                                           |
2578  | ----------- | --------------- | ---- | ---------------------------------------------- |
2579  | objectArray | IRemoteObject[] | 是   | 要写入MessageSequence的IRemoteObject对象数组。 |
2580
2581**错误码:**
2582
2583以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2584
2585  | 错误码ID | 错误信息 |
2586  | ------- | ------- |
2587  | 1900009 | write data to message sequence failed |
2588
2589**示例:**
2590
2591  ```ts
2592  class TestRemoteObject extends rpc.RemoteObject {
2593      constructor(descriptor) {
2594          super(descriptor);
2595          this.modifyLocalInterface(this, descriptor);
2596      }
2597
2598      asObject(): rpc.IRemoteObject {
2599          return this;
2600      }
2601  }
2602  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
2603  let data = rpc.MessageSequence.create();
2604  let result = data.writeRemoteObjectArray(a);
2605  try {
2606      data.writeRemoteObjectArray(a);
2607  } catch(error) {
2608      console.info("rpc write remote object array fail, errorCode " + error.code);
2609      console.info("rpc write remote object array fail, errorMessage" + error.message);
2610  }
2611  console.log("RpcClient: writeRemoteObjectArray is " + result);
2612  ```
2613
2614### readRemoteObjectArray
2615
2616readRemoteObjectArray(objects: IRemoteObject[]): void
2617
2618从MessageSequence读取IRemoteObject对象数组。
2619
2620**系统能力**:SystemCapability.Communication.IPC.Core
2621
2622**参数:**
2623
2624  | 参数名  | 类型            | 必填 | 说明                                           |
2625  | ------- | --------------- | ---- | ---------------------------------------------- |
2626  | objects | IRemoteObject[] | 是   | 从MessageSequence读取的IRemoteObject对象数组。 |
2627
2628**错误码:**
2629
2630以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2631
2632  | 错误码ID | 错误信息 |
2633  | ------- | -------- |
2634  | 1900010 | read data from message sequence failed |
2635
2636**示例:**
2637
2638  ```ts
2639  class MyDeathRecipient {
2640      onRemoteDied() {
2641          console.log("server died");
2642      }
2643  }
2644  class TestRemoteObject extends rpc.RemoteObject {
2645      constructor(descriptor) {
2646          super(descriptor);
2647          this.modifyLocalInterface(this, descriptor);
2648      }
2649
2650      asObject(): rpc.IRemoteObject {
2651          return this;
2652      }
2653  }
2654  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
2655  let data = rpc.MessageSequence.create();
2656  data.writeRemoteObjectArray(a);
2657  let b = new Array(3);
2658  try {
2659      data.readRemoteObjectArray(b);
2660  } catch(error) {
2661      console.info("rpc read remote object array fail, errorCode " + error.code);
2662      console.info("rpc read remote object array fail, errorMessage" + error.message);
2663  }
2664  data.readRemoteObjectArray(b);
2665  ```
2666
2667### readRemoteObjectArray
2668
2669readRemoteObjectArray(): IRemoteObject[]
2670
2671从MessageSequence读取IRemoteObject对象数组。
2672
2673**系统能力**:SystemCapability.Communication.IPC.Core
2674
2675**返回值:**
2676
2677  | 类型            | 说明                        |
2678  | --------------- | --------------------------- |
2679  | IRemoteObject[] | 返回IRemoteObject对象数组。 |
2680
2681**错误码:**
2682
2683以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2684
2685  | 错误码ID | 错误信息 |
2686  | ------- | -------- |
2687  | 1900010 | read data from message sequence failed |
2688
2689**示例:**
2690
2691  ```ts
2692  class TestRemoteObject extends rpc.RemoteObject {
2693      constructor(descriptor) {
2694          super(descriptor);
2695          this.modifyLocalInterface(this, descriptor);
2696      }
2697
2698      asObject(): rpc.IRemoteObject {
2699          return this;
2700      }
2701  }
2702  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
2703  let data = rpc.MessageSequence.create();
2704  data.writeRemoteObjectArray(a);
2705  try {
2706      let b = data.readRemoteObjectArray();
2707      console.log("RpcClient: readRemoteObjectArray is " + b);
2708  } catch(error) {
2709      console.info("rpc read remote object array fail, errorCode " + error.code);
2710      console.info("rpc read remote object array fail, errorMessage" + error.message);
2711  }
2712  ```
2713
2714
2715### closeFileDescriptor<sup>9+</sup>
2716
2717static closeFileDescriptor(fd: number): void
2718
2719静态方法,关闭给定的文件描述符。
2720
2721**系统能力**:SystemCapability.Communication.IPC.Core
2722
2723**参数:**
2724
2725  | 参数名 | 类型   | 必填 | 说明                 |
2726  | ------ | ------ | ---- | -------------------- |
2727  | fd     | number | 是   | 要关闭的文件描述符。 |
2728
2729**示例:**
2730
2731  ```ts
2732  import fileio from '@ohos.fileio';
2733  let filePath = "path/to/file";
2734  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2735  try {
2736      rpc.MessageSequence.closeFileDescriptor(fd);
2737  } catch(error) {
2738      console.info("rpc close file descriptor fail, errorCode " + error.code);
2739      console.info("rpc close file descriptor fail, errorMessage" + error.message);
2740  }
2741  ```
2742
2743### dupFileDescriptor
2744
2745static dupFileDescriptor(fd: number) :number
2746
2747静态方法,复制给定的文件描述符。
2748
2749**系统能力**:SystemCapability.Communication.IPC.Core
2750
2751**参数:**
2752
2753  | 参数名 | 类型   | 必填 | 说明                     |
2754  | ------ | ------ | ---- | ------------------------ |
2755  | fd     | number | 是   | 表示已存在的文件描述符。 |
2756
2757**返回值:**
2758
2759  | 类型   | 说明                 |
2760  | ------ | -------------------- |
2761  | number | 返回新的文件描述符。 |
2762
2763**错误码:**
2764
2765以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2766
2767  | 错误码ID | 错误信息 |
2768  | ------- | ------- |
2769  | 1900013 | call os dup function failed |
2770
2771**示例:**
2772
2773  ```ts
2774  import fileio from '@ohos.fileio';
2775  let filePath = "path/to/file";
2776  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2777  try {
2778      let newFd = rpc.MessageSequence.dupFileDescriptor(fd);
2779  } catch(error) {
2780      console.info("rpc dup file descriptor fail, errorCode " + error.code);
2781      console.info("rpc dup file descriptor fail, errorMessage" + error.message);
2782  }
2783  ```
2784
2785### containFileDescriptors
2786
2787containFileDescriptors(): boolean
2788
2789检查此MessageSequence对象是否包含文件描述符。
2790
2791**系统能力**:SystemCapability.Communication.IPC.Core
2792
2793**返回值:**
2794
2795  | 类型    | 说明                                                                 |
2796  | ------- | -------------------------------------------------------------------- |
2797  | boolean | true:包含文件描述符,false:不包含文件描述符。|
2798
2799**示例:**
2800
2801
2802  ```ts
2803  import fileio from '@ohos.fileio';
2804  let sequence = new rpc.MessageSequence();
2805  let filePath = "path/to/file";
2806  let r1 = sequence.containFileDescriptors();
2807  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2808  try {
2809      sequence.writeFileDescriptor(fd);
2810  } catch(error) {
2811      console.info("rpc write file descriptor fail, errorCode " + error.code);
2812      console.info("rpc write file descriptor fail, errorMessage" + error.message);
2813  }
2814  try {
2815      let containFD = sequence.containFileDescriptors();
2816      console.log("RpcTest: sequence after write fd containFd result is : " + containFD);
2817  } catch(error) {
2818      console.info("rpc contain file descriptor fail, errorCode " + error.code);
2819      console.info("rpc contain file descriptor fail, errorMessage" + error.message);
2820  }
2821  ```
2822
2823### writeFileDescriptor
2824
2825writeFileDescriptor(fd: number): void
2826
2827写入文件描述符到MessageSequence。
2828
2829**系统能力**:SystemCapability.Communication.IPC.Core
2830
2831**参数:**
2832
2833  | 参数名 | 类型   | 必填 | 说明         |
2834  | ------ | ------ | ---- | ------------ |
2835  | fd     | number | 是   | 文件描述符。 |
2836
2837**错误码:**
2838
2839以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2840
2841  | 错误码ID | 错误信息 |
2842  | -------- | ------ |
2843  | 1900009 | write data to message sequence failed |
2844
2845**示例:**
2846
2847  ```ts
2848  import fileio from '@ohos.fileio';
2849  let sequence = new rpc.MessageSequence();
2850  let filePath = "path/to/file";
2851  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2852  try {
2853      sequence.writeFileDescriptor(fd);
2854  } catch(error) {
2855      console.info("rpc write file descriptor fail, errorCode " + error.code);
2856      console.info("rpc write file descriptor fail, errorMessage" + error.message);
2857  }
2858  ```
2859
2860### readFileDescriptor
2861
2862readFileDescriptor(): number
2863
2864从MessageSequence中读取文件描述符。
2865
2866**系统能力**:SystemCapability.Communication.IPC.Core
2867
2868**返回值:**
2869
2870  | 类型   | 说明             |
2871  | ------ | ---------------- |
2872  | number | 返回文件描述符。 |
2873
2874**错误码:**
2875
2876以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2877
2878  | 错误码ID | 错误信息 |
2879  | ------- | -------- |
2880  | 1900010 | read data from message sequence failed |
2881
2882**示例:**
2883
2884  ```ts
2885  import fileio from '@ohos.fileio';
2886  let sequence = new rpc.MessageSequence();
2887  let filePath = "path/to/file";
2888  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2889  try {
2890      sequence.writeFileDescriptor(fd);
2891  } catch(error) {
2892      console.info("rpc write file descriptor fail, errorCode " + error.code);
2893      console.info("rpc write file descriptor fail, errorMessage" + error.message);
2894  }
2895  try {
2896      let readFD = sequence.readFileDescriptor();
2897  } catch(error) {
2898      console.info("rpc read file descriptor fail, errorCode " + error.code);
2899      console.info("rpc read file descriptor fail, errorMessage" + error.message);
2900  }
2901  ```
2902
2903### writeAshmem
2904
2905writeAshmem(ashmem: Ashmem): void
2906
2907将指定的匿名共享对象写入此MessageSequence。
2908
2909**系统能力**:SystemCapability.Communication.IPC.Core
2910
2911**参数:**
2912
2913  | 参数名 | 类型   | 必填 | 说明                                  |
2914  | ------ | ------ | ---- | ------------------------------------- |
2915  | ashmem | Ashmem | 是   | 要写入MessageSequence的匿名共享对象。 |
2916
2917**错误码:**
2918
2919以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2920
2921  | 错误码ID | 错误信息 |
2922  | ------- | ------- |
2923  | 1900003 | write to ashmem failed |
2924
2925**示例:**
2926
2927  ```ts
2928  let sequence = new rpc.MessageSequence();
2929  let ashmem;
2930  try {
2931      ashmem = rpc.Ashmem.create("ashmem", 1024);
2932  } catch(error) {
2933      console.info("rpc create ashmem fail, errorCode " + error.code);
2934      console.info("rpc creat ashmem fail, errorMessage" + error.message);
2935  }
2936  try {
2937      sequence.writeAshmem(ashmem);
2938  } catch(error) {
2939      console.info("rpc write ashmem fail, errorCode " + error.code);
2940      console.info("rpc write ashmem fail, errorMessage" + error.message);
2941  }
2942  ```
2943
2944
2945### readAshmem
2946
2947readAshmem(): Ashmem
2948
2949从MessageSequence读取匿名共享对象。
2950
2951**系统能力**:SystemCapability.Communication.IPC.Core
2952
2953**返回值:**
2954
2955  | 类型   | 说明               |
2956  | ------ | ------------------ |
2957  | Ashmem | 返回匿名共享对象。 |
2958
2959**错误码:**
2960
2961以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
2962
2963  | 错误码ID | 错误信息 |
2964  | ------- | -------- |
2965  | 1900004 | read from ashmem failed |
2966
2967**示例:**
2968
2969  ```ts
2970  let sequence = new rpc.MessageSequence();
2971  let ashmem;
2972  try {
2973      ashmem = rpc.Ashmem.create("ashmem", 1024);
2974  } catch(error) {
2975      console.info("rpc create ashmem fail, errorCode " + error.code);
2976      console.info("rpc creat ashmem fail, errorMessage" + error.message);
2977  }
2978  try {
2979      sequence.writeAshmem(ashmem);
2980  } catch(error) {
2981      console.info("rpc write ashmem fail, errorCode " + error.code);
2982      console.info("rpc write ashmem fail, errorMessage" + error.message);
2983  }
2984  try {
2985      let readAshmem = sequence.readAshmem();
2986      console.log("RpcTest: read ashmem to result is : " + readAshmem);
2987  } catch(error) {
2988      console.info("rpc read ashmem fail, errorCode " + error.code);
2989      console.info("rpc read ashmem fail, errorMessage" + error.message);
2990  }
2991  ```
2992
2993### getRawDataCapacity
2994
2995getRawDataCapacity(): number
2996
2997获取MessageSequence可以容纳的最大原始数据量。
2998
2999**系统能力**:SystemCapability.Communication.IPC.Core
3000
3001**返回值:**
3002
3003  | 类型   | 说明                                                         |
3004  | ------ | ------------------------------------------------------------ |
3005  | number | 返回MessageSequence可以容纳的最大原始数据量,即128&nbsp;Mb。 |
3006
3007**示例:**
3008
3009  ```ts
3010  let sequence = new rpc.MessageSequence();
3011  let result = sequence.getRawDataCapacity();
3012  console.log("RpcTest: sequence get RawDataCapacity result is : " + result);
3013  ```
3014
3015### writeRawData
3016
3017writeRawData(rawData: number[], size: number): void
3018
3019将原始数据写入MessageSequence对象。
3020
3021**系统能力**:SystemCapability.Communication.IPC.Core
3022
3023**参数:**
3024
3025  | 参数名  | 类型     | 必填 | 说明                               |
3026  | ------- | -------- | ---- | ---------------------------------- |
3027  | rawData | number[] | 是   | 要写入的原始数据。                 |
3028  | size    | number   | 是   | 发送的原始数据大小,以字节为单位。 |
3029
3030**错误码:**
3031
3032以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
3033
3034  | 错误码ID | 错误信息 |
3035  | ------- | ------ |
3036  | 1900009 | write data to message sequence failed |
3037
3038**示例:**
3039
3040  ```ts
3041  let sequence = new rpc.MessageSequence();
3042  let arr = [1, 2, 3, 4, 5];
3043  try {
3044      sequence.writeRawData(arr, arr.length);
3045  } catch(error) {
3046      console.info("rpc write rawdata fail, errorCode " + error.code);
3047      console.info("rpc write rawdata fail, errorMessage" + error.message);
3048  }
3049  ```
3050
3051### readRawData
3052
3053readRawData(size: number): number[]
3054
3055从MessageSequence读取原始数据。
3056
3057**系统能力**:SystemCapability.Communication.IPC.Core
3058
3059**参数:**
3060
3061  | 参数名 | 类型   | 必填 | 说明                     |
3062  | ------ | ------ | ---- | ------------------------ |
3063  | size   | number | 是   | 要读取的原始数据的大小。 |
3064
3065**返回值:**
3066
3067  | 类型     | 说明                           |
3068  | -------- | ------------------------------ |
3069  | number[] | 返回原始数据(以字节为单位)。 |
3070
3071**错误码:**
3072
3073以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
3074
3075  | 错误码ID | 错误信息 |
3076  | ------- | -------- |
3077  | 1900010 | read data from message sequence failed |
3078
3079**示例:**
3080
3081  ```ts
3082  let sequence = new rpc.MessageSequence();
3083  let arr = [1, 2, 3, 4, 5];
3084  try {
3085      sequence.writeRawData(arr, arr.length);
3086  } catch(error) {
3087      console.info("rpc write rawdata fail, errorCode " + error.code);
3088      console.info("rpc write rawdata fail, errorMessage" + error.message);
3089  }
3090  try {
3091      let result = sequence.readRawData(5);
3092      console.log("RpcTest: sequence read raw data result is : " + result);
3093  } catch(error) {
3094      console.info("rpc read rawdata fail, errorCode " + error.code);
3095      console.info("rpc read rawdata fail, errorMessage" + error.message);
3096  }
3097  ```
3098
3099## MessageParcel<sup>(deprecated)</sup>
3100
3101>从API version 9 开始不再维护,建议使用[MessageSequence](#messagesequence9)类替代。
3102
3103在RPC过程中,发送方可以使用MessageParcel提供的写方法,将待发送的数据以特定格式写入该对象。接收方可以使用MessageParcel提供的读方法从该对象中读取特定格式的数据。数据格式包括:基础类型及数组、IPC对象、接口描述符和自定义序列化对象。
3104
3105### create
3106
3107static create(): MessageParcel
3108
3109静态方法,创建MessageParcel对象。
3110
3111**系统能力**:SystemCapability.Communication.IPC.Core
3112
3113**返回值:**
3114
3115  | 类型          | 说明                          |
3116  | ------------- | ----------------------------- |
3117  | MessageParcel | 返回创建的MessageParcel对象。 |
3118
3119**示例:**
3120
3121  ```ts
3122  let data = rpc.MessageParcel.create();
3123  console.log("RpcClient: data is " + data);
3124  ```
3125
3126### reclaim
3127
3128reclaim(): void
3129
3130释放不再使用的MessageParcel对象。
3131
3132**系统能力**:SystemCapability.Communication.IPC.Core
3133
3134**示例:**
3135
3136  ```ts
3137  let reply = rpc.MessageParcel.create();
3138  reply.reclaim();
3139  ```
3140
3141### writeRemoteObject
3142
3143writeRemoteObject(object: [IRemoteObject](#iremoteobject)): boolean
3144
3145序列化远程对象并将其写入MessageParcel对象。
3146
3147**系统能力**:SystemCapability.Communication.IPC.Core
3148
3149**参数:**
3150
3151  | 参数名 | 类型                            | 必填 | 说明                                    |
3152  | ------ | ------------------------------- | ---- | --------------------------------------- |
3153  | object | [IRemoteObject](#iremoteobject) | 是   | 要序列化并写入MessageParcel的远程对象。 |
3154
3155**返回值:**
3156
3157  | 类型    | 说明                                      |
3158  | ------- | ----------------------------------------- |
3159  | boolean | true:操作成功,false:操作失败。|
3160
3161**示例:**
3162
3163  ```ts
3164  class MyDeathRecipient {
3165      onRemoteDied() {
3166          console.log("server died");
3167      }
3168  }
3169  class TestRemoteObject extends rpc.RemoteObject {
3170      constructor(descriptor) {
3171          super(descriptor);
3172      }
3173      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3174          return true;
3175      }
3176      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3177          return true;
3178      }
3179      isObjectDead(): boolean {
3180          return false;
3181      }
3182  }
3183  let data = rpc.MessageParcel.create();
3184  let testRemoteObject = new TestRemoteObject("testObject");
3185  data.writeRemoteObject(testRemoteObject);
3186  ```
3187
3188### readRemoteObject
3189
3190readRemoteObject(): IRemoteObject
3191
3192从MessageParcel读取远程对象。此方法用于反序列化MessageParcel对象以生成IRemoteObject。远程对象按写入MessageParcel的顺序读取。
3193
3194**系统能力**:SystemCapability.Communication.IPC.Core
3195
3196**返回值:**
3197
3198  | 类型                            | 说明               |
3199  | ------------------------------- | ------------------ |
3200  | [IRemoteObject](#iremoteobject) | 读取到的远程对象。 |
3201
3202**示例:**
3203
3204  ```ts
3205  class MyDeathRecipient {
3206      onRemoteDied() {
3207          console.log("server died");
3208      }
3209  }
3210  class TestRemoteObject extends rpc.RemoteObject {
3211      constructor(descriptor) {
3212          super(descriptor);
3213      }
3214      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3215          return true;
3216      }
3217      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3218          return true;
3219      }
3220      isObjectDead(): boolean {
3221          return false;
3222      }
3223  }
3224  let data = rpc.MessageParcel.create();
3225  let testRemoteObject = new TestRemoteObject("testObject");
3226  data.writeRemoteObject(testRemoteObject);
3227  let proxy = data.readRemoteObject();
3228  ```
3229
3230### writeInterfaceToken
3231
3232writeInterfaceToken(token: string): boolean
3233
3234将接口描述符写入MessageParcel对象,远端对象可使用该信息校验本次通信。
3235
3236**系统能力**:SystemCapability.Communication.IPC.Core
3237
3238**参数:**
3239
3240  | 参数名 | 类型   | 必填 | 说明               |
3241  | ------ | ------ | ---- | ------------------ |
3242  | token  | string | 是   | 字符串类型描述符。 |
3243
3244**返回值:**
3245
3246  | 类型    | 说明                                      |
3247  | ------- | ----------------------------------------- |
3248  | boolean | true:操作成功,false:操作失败。|
3249
3250**示例:**
3251
3252  ```ts
3253  let data = rpc.MessageParcel.create();
3254  let result = data.writeInterfaceToken("aaa");
3255  console.log("RpcServer: writeInterfaceToken is " + result);
3256  ```
3257
3258
3259### readInterfaceToken
3260
3261readInterfaceToken(): string
3262
3263从MessageParcel中读取接口描述符,接口描述符按写入MessageParcel的顺序读取,本地对象可使用该信息检验本次通信。
3264
3265**系统能力**:SystemCapability.Communication.IPC.Core
3266
3267**返回值:**
3268
3269  | 类型   | 说明                     |
3270  | ------ | ------------------------ |
3271  | string | 返回读取到的接口描述符。 |
3272
3273**示例:**
3274
3275  ```ts
3276  class Stub extends rpc.RemoteObject {
3277      onRemoteMessageRequest(code, data, reply, option) {
3278          let interfaceToken = data.readInterfaceToken();
3279          console.log("RpcServer: interfaceToken is " + interfaceToken);
3280          return true;
3281      }
3282  }
3283  ```
3284
3285### getSize
3286
3287getSize(): number
3288
3289获取当前MessageParcel的数据大小。
3290
3291**系统能力**:SystemCapability.Communication.IPC.Core
3292
3293**返回值:**
3294
3295  | 类型   | 说明                                          |
3296  | ------ | --------------------------------------------- |
3297  | number | 获取的MessageParcel的数据大小。以字节为单位。 |
3298
3299**示例:**
3300
3301  ```ts
3302  let data = rpc.MessageParcel.create();
3303  let size = data.getSize();
3304  console.log("RpcClient: size is " + size);
3305  ```
3306
3307### getCapacity
3308
3309getCapacity(): number
3310
3311获取当前MessageParcel的容量。
3312
3313**系统能力**:SystemCapability.Communication.IPC.Core
3314
3315**返回值:**
3316
3317  | 类型   | 说明                                          |
3318  | ------ | --------------------------------------------- |
3319  | number | 获取的MessageParcel的容量大小。以字节为单位。 |
3320
3321**示例:**
3322
3323  ```ts
3324  let data = rpc.MessageParcel.create();
3325  let result = data.getCapacity();
3326  console.log("RpcClient: capacity is " + result);
3327  ```
3328
3329### setSize
3330
3331setSize(size: number): boolean
3332
3333设置MessageParcel实例中包含的数据大小。
3334
3335**系统能力**:SystemCapability.Communication.IPC.Core
3336
3337**参数:**
3338
3339  | 参数名 | 类型   | 必填 | 说明                                        |
3340  | ------ | ------ | ---- | ------------------------------------------- |
3341  | size   | number | 是   | MessageParcel实例的数据大小。以字节为单位。 |
3342
3343**返回值:**
3344
3345  | 类型    | 说明                              |
3346  | ------- | --------------------------------- |
3347  | boolean | true:设置成功,false:设置失败。|
3348
3349**示例:**
3350
3351  ```ts
3352  let data = rpc.MessageParcel.create();
3353  let setSize = data.setSize(16);
3354  console.log("RpcClient: setSize is " + setSize);
3355  ```
3356
3357### setCapacity
3358
3359setCapacity(size: number): boolean
3360
3361设置MessageParcel实例的存储容量。
3362
3363**系统能力**:SystemCapability.Communication.IPC.Core
3364
3365**参数:**
3366
3367  | 参数名 | 类型   | 必填 | 说明                                        |
3368  | ------ | ------ | ---- | ------------------------------------------- |
3369  | size   | number | 是   | MessageParcel实例的存储容量。以字节为单位。 |
3370
3371**返回值:**
3372
3373  | 类型    | 说明                              |
3374  | ------- | --------------------------------- |
3375  | boolean | true:设置成功,false:设置失败。|
3376
3377**示例:**
3378
3379  ```ts
3380  let data = rpc.MessageParcel.create();
3381  let result = data.setCapacity(100);
3382  console.log("RpcClient: setCapacity is " + result);
3383  ```
3384
3385### getWritableBytes
3386
3387getWritableBytes(): number
3388
3389获取MessageParcel的可写字节空间。
3390
3391**系统能力**:SystemCapability.Communication.IPC.Core
3392
3393**返回值:**
3394
3395  | 类型   | 说明                                                |
3396  | ------ | --------------------------------------------------- |
3397  | number | 获取到的MessageParcel的可写字节空间。以字节为单位。 |
3398
3399**示例:**
3400
3401  ```ts
3402  class Stub extends rpc.RemoteObject {
3403      onRemoteMessageRequest(code, data, reply, option) {
3404          let getWritableBytes = data.getWritableBytes();
3405          console.log("RpcServer: getWritableBytes is " + getWritableBytes);
3406          return true;
3407      }
3408  }
3409  ```
3410
3411### getReadableBytes
3412
3413getReadableBytes(): number
3414
3415获取MessageParcel的可读字节空间。
3416
3417**系统能力**:SystemCapability.Communication.IPC.Core
3418
3419**返回值:**
3420
3421  | 类型   | 说明                                                |
3422  | ------ | --------------------------------------------------- |
3423  | number | 获取到的MessageParcel的可读字节空间。以字节为单位。 |
3424
3425**示例:**
3426
3427  ```ts
3428  class Stub extends rpc.RemoteObject {
3429      onRemoteRequest(code, data, reply, option) {
3430          let result = data.getReadableBytes();
3431          console.log("RpcServer: getReadableBytes is " + result);
3432          return true;
3433      }
3434  }
3435  ```
3436
3437### getReadPosition
3438
3439getReadPosition(): number
3440
3441获取MessageParcel的读位置。
3442
3443**系统能力**:SystemCapability.Communication.IPC.Core
3444
3445**返回值:**
3446
3447  | 类型   | 说明                                    |
3448  | ------ | --------------------------------------- |
3449  | number | 返回MessageParcel实例中的当前读取位置。 |
3450
3451**示例:**
3452
3453  ```ts
3454  let data = rpc.MessageParcel.create();
3455  let readPos = data.getReadPosition();
3456  console.log("RpcClient: readPos is " + readPos);
3457  ```
3458
3459### getWritePosition
3460
3461getWritePosition(): number
3462
3463获取MessageParcel的写位置。
3464
3465**系统能力**:SystemCapability.Communication.IPC.Core
3466
3467**返回值:**
3468
3469  | 类型   | 说明                                    |
3470  | ------ | --------------------------------------- |
3471  | number | 返回MessageParcel实例中的当前写入位置。 |
3472
3473**示例:**
3474
3475  ```ts
3476  let data = rpc.MessageParcel.create();
3477  data.writeInt(10);
3478  let bwPos = data.getWritePosition();
3479  console.log("RpcClient: bwPos is " + bwPos);
3480  ```
3481
3482### rewindRead
3483
3484rewindRead(pos: number): boolean
3485
3486重新偏移读取位置到指定的位置。
3487
3488**系统能力**:SystemCapability.Communication.IPC.Core
3489
3490**参数:**
3491
3492  | 参数名 | 类型   | 必填 | 说明                     |
3493  | ------ | ------ | ---- | ------------------------ |
3494  | pos    | number | 是   | 开始读取数据的目标位置。 |
3495
3496**返回值:**
3497
3498  | 类型    | 说明                                              |
3499  | ------- | ------------------------------------------------- |
3500  | boolean | true:读取位置发生更改,false:读取位置未发生更改。|
3501
3502**示例:**
3503
3504  ```ts
3505  let data = rpc.MessageParcel.create();
3506  data.writeInt(12);
3507  data.writeString("parcel");
3508  let number = data.readInt();
3509  console.log("RpcClient: number is " + number);
3510  data.rewindRead(0);
3511  let number2 = data.readInt();
3512  console.log("RpcClient: rewindRead is " + number2);
3513  ```
3514
3515### rewindWrite
3516
3517rewindWrite(pos: number): boolean
3518
3519重新偏移写位置到指定的位置。
3520
3521**系统能力**:SystemCapability.Communication.IPC.Core
3522
3523**参数:**
3524
3525  | 参数名 | 类型   | 必填 | 说明                     |
3526  | ------ | ------ | ---- | ------------------------ |
3527  | pos    | number | 是   | 开始写入数据的目标位置。 |
3528
3529**返回值:**
3530
3531  | 类型    | 说明                                          |
3532  | ------- | --------------------------------------------- |
3533  | boolean | true:写入位置发生更改,false:写入位置未发生更改。|
3534
3535**示例:**
3536
3537  ```ts
3538  let data = rpc.MessageParcel.create();
3539  data.writeInt(4);
3540  data.rewindWrite(0);
3541  data.writeInt(5);
3542  let number = data.readInt();
3543  console.log("RpcClient: rewindWrite is: " + number);
3544  ```
3545
3546### writeByte
3547
3548writeByte(val: number): boolean
3549
3550将字节值写入MessageParcel实例。
3551
3552**系统能力**:SystemCapability.Communication.IPC.Core
3553
3554**参数:**
3555
3556  | 参数名 | 类型   | 必填 | 说明             |
3557  | ------ | ------ | ---- | ---------------- |
3558  | val    | number | 是   | 要写入的字节值。 |
3559
3560**返回值:**
3561
3562  | 类型    | 说明                          |
3563  | ------- | ----------------------------- |
3564  | boolean | 写入返回成功,否则返回false。 |
3565
3566**示例:**
3567
3568  ```ts
3569  let data = rpc.MessageParcel.create();
3570  let result = data.writeByte(2);
3571  console.log("RpcClient: writeByte is: " + result);
3572  ```
3573
3574### readByte
3575
3576readByte(): number
3577
3578从MessageParcel实例读取字节值。
3579
3580**系统能力**:SystemCapability.Communication.IPC.Core
3581
3582**返回值:**
3583
3584  | 类型   | 说明         |
3585  | ------ | ------------ |
3586  | number | 返回字节值。 |
3587
3588**示例:**
3589
3590  ```ts
3591  let data = rpc.MessageParcel.create();
3592  let result = data.writeByte(2);
3593  console.log("RpcClient: writeByte is: " + result);
3594  let ret = data.readByte();
3595  console.log("RpcClient: readByte is: " + ret);
3596  ```
3597
3598### writeShort
3599
3600writeShort(val: number): boolean
3601
3602将短整数值写入MessageParcel实例。
3603
3604**系统能力**:SystemCapability.Communication.IPC.Core
3605
3606**参数:**
3607
3608  | 参数名 | 类型   | 必填 | 说明               |
3609  | ------ | ------ | ---- | ------------------ |
3610  | val    | number | 是   | 要写入的短整数值。 |
3611
3612**返回值:**
3613
3614  | 类型    | 说明                          |
3615  | ------- | ----------------------------- |
3616  | boolean | true:写入成功,false:写入失败。|
3617
3618**示例:**
3619
3620  ```ts
3621  let data = rpc.MessageParcel.create();
3622  let result = data.writeShort(8);
3623  console.log("RpcClient: writeShort is: " + result);
3624  ```
3625
3626### readShort
3627
3628readShort(): number
3629
3630从MessageParcel实例读取短整数值。
3631
3632**系统能力**:SystemCapability.Communication.IPC.Core
3633
3634**返回值:**
3635
3636  | 类型   | 说明           |
3637  | ------ | -------------- |
3638  | number | 返回短整数值。 |
3639
3640**示例:**
3641
3642  ```ts
3643  let data = rpc.MessageParcel.create();
3644  let result = data.writeShort(8);
3645  console.log("RpcClient: writeShort is: " + result);
3646  let ret = data.readShort();
3647  console.log("RpcClient: readShort is: " + ret);
3648  ```
3649
3650### writeInt
3651
3652writeInt(val: number): boolean
3653
3654将整数值写入MessageParcel实例。
3655
3656**系统能力**:SystemCapability.Communication.IPC.Core
3657
3658**参数:**
3659
3660  | 参数名 | 类型   | 必填 | 说明             |
3661  | ------ | ------ | ---- | ---------------- |
3662  | val    | number | 是   | 要写入的整数值。 |
3663
3664**返回值:**
3665
3666  | 类型    | 说明                          |
3667  | ------- | ----------------------------- |
3668  | boolean | 写入返回成功,否则返回false。 |
3669
3670**示例:**
3671
3672  ```ts
3673  let data = rpc.MessageParcel.create();
3674  let result = data.writeInt(10);
3675  console.log("RpcClient: writeInt is " + result);
3676  ```
3677
3678### readInt
3679
3680readInt(): number
3681
3682从MessageParcel实例读取整数值。
3683
3684**系统能力**:SystemCapability.Communication.IPC.Core
3685
3686**返回值:**
3687
3688  | 类型   | 说明         |
3689  | ------ | ------------ |
3690  | number | 返回整数值。 |
3691
3692**示例:**
3693
3694  ```ts
3695  let data = rpc.MessageParcel.create();
3696  let result = data.writeInt(10);
3697  console.log("RpcClient: writeInt is " + result);
3698  let ret = data.readInt();
3699  console.log("RpcClient: readInt is " + ret);
3700  ```
3701
3702### writeLong
3703
3704writeLong(val: number): boolean
3705
3706将长整数值写入MessageParcel实例。
3707
3708**系统能力**:SystemCapability.Communication.IPC.Core
3709
3710**参数:**
3711
3712  | 参数名 | 类型   | 必填 | 说明             |
3713  | ------ | ------ | ---- | ---------------- |
3714  | val    | number | 是   | 要写入的长整数值 |
3715
3716**返回值:**
3717
3718  | 类型    | 说明                              |
3719  | ------- | --------------------------------- |
3720  | boolean | true:写入成功,false:写入失败。|
3721
3722**示例:**
3723
3724  ```ts
3725  let data = rpc.MessageParcel.create();
3726  let result = data.writeLong(10000);
3727  console.log("RpcClient: writeLong is " + result);
3728  ```
3729
3730### readLong
3731
3732readLong(): number
3733
3734从MessageParcel实例中读取长整数值。
3735
3736**系统能力**:SystemCapability.Communication.IPC.Core
3737
3738**返回值:**
3739
3740  | 类型   | 说明           |
3741  | ------ | -------------- |
3742  | number | 返回长整数值。 |
3743
3744**示例:**
3745
3746  ```ts
3747  let data = rpc.MessageParcel.create();
3748  let result = data.writeLong(10000);
3749  console.log("RpcClient: writeLong is " + result);
3750  let ret = data.readLong();
3751  console.log("RpcClient: readLong is " + ret);
3752  ```
3753
3754### writeFloat
3755
3756writeFloat(val: number): boolean
3757
3758将浮点值写入MessageParcel实例。
3759
3760**系统能力**:SystemCapability.Communication.IPC.Core
3761
3762**参数:**
3763
3764  | 参数名 | 类型   | 必填 | 说明             |
3765  | ------ | ------ | ---- | ---------------- |
3766  | val    | number | 是   | 要写入的浮点值。 |
3767
3768**返回值:**
3769
3770  | 类型    | 说明                              |
3771  | ------- | --------------------------------- |
3772  | boolean | true:写入成功,false:写入失败。|
3773
3774**示例:**
3775
3776  ```ts
3777  let data = rpc.MessageParcel.create();
3778  let result = data.writeFloat(1.2);
3779  console.log("RpcClient: writeFloat is " + result);
3780  ```
3781
3782### readFloat
3783
3784readFloat(): number
3785
3786从MessageParcel实例中读取浮点值。
3787
3788**系统能力**:SystemCapability.Communication.IPC.Core
3789
3790**返回值:**
3791
3792  | 类型   | 说明         |
3793  | ------ | ------------ |
3794  | number | 返回浮点值。 |
3795
3796**示例:**
3797
3798  ```ts
3799  let data = rpc.MessageParcel.create();
3800  let result = data.writeFloat(1.2);
3801  console.log("RpcClient: writeFloat is " + result);
3802  let ret = data.readFloat();
3803  console.log("RpcClient: readFloat is " + ret);
3804  ```
3805
3806### writeDouble
3807
3808writeDouble(val: number): boolean
3809
3810将双精度浮点值写入MessageParcel实例。
3811
3812**系统能力**:SystemCapability.Communication.IPC.Core
3813
3814**参数:**
3815
3816  | 参数名 | 类型   | 必填 | 说明                   |
3817  | ------ | ------ | ---- | ---------------------- |
3818  | val    | number | 是   | 要写入的双精度浮点值。 |
3819
3820**返回值:**
3821
3822  | 类型    | 说明                              |
3823  | ------- | --------------------------------- |
3824  | boolean | true:写入成功,false:写入失败。|
3825
3826**示例:**
3827
3828  ```ts
3829  let data = rpc.MessageParcel.create();
3830  let result = data.writeDouble(10.2);
3831  console.log("RpcClient: writeDouble is " + result);
3832  ```
3833
3834### readDouble
3835
3836readDouble(): number
3837
3838从MessageParcel实例读取双精度浮点值。
3839
3840**系统能力**:SystemCapability.Communication.IPC.Core
3841
3842**返回值:**
3843
3844  | 类型   | 说明               |
3845  | ------ | ------------------ |
3846  | number | 返回双精度浮点值。 |
3847
3848**示例:**
3849
3850  ```ts
3851  let data = rpc.MessageParcel.create();
3852  let result = data.writeDouble(10.2);
3853  console.log("RpcClient: writeDouble is " + result);
3854  let ret = data.readDouble();
3855  console.log("RpcClient: readDouble is " + ret);
3856  ```
3857
3858### writeBoolean
3859
3860writeBoolean(val: boolean): boolean
3861
3862将布尔值写入MessageParcel实例。
3863
3864**系统能力**:SystemCapability.Communication.IPC.Core
3865
3866**参数:**
3867
3868  | 参数名 | 类型    | 必填 | 说明             |
3869  | ------ | ------- | ---- | ---------------- |
3870  | val    | boolean | 是   | 要写入的布尔值。 |
3871
3872**返回值:**
3873
3874  | 类型    | 说明                              |
3875  | ------- | --------------------------------- |
3876  | boolean | true:写入成功,false:写入失败。|
3877
3878**示例:**
3879
3880  ```ts
3881  let data = rpc.MessageParcel.create();
3882  let result = data.writeBoolean(false);
3883  console.log("RpcClient: writeBoolean is " + result);
3884  ```
3885
3886### readBoolean
3887
3888readBoolean(): boolean
3889
3890从MessageParcel实例读取布尔值。
3891
3892**系统能力**:SystemCapability.Communication.IPC.Core
3893
3894**返回值:**
3895
3896  | 类型    | 说明                 |
3897  | ------- | -------------------- |
3898  | boolean | 返回读取到的布尔值。 |
3899
3900**示例:**
3901
3902  ```ts
3903  let data = rpc.MessageParcel.create();
3904  let result = data.writeBoolean(false);
3905  console.log("RpcClient: writeBoolean is " + result);
3906  let ret = data.readBoolean();
3907  console.log("RpcClient: readBoolean is " + ret);
3908  ```
3909
3910### writeChar
3911
3912writeChar(val: number): boolean
3913
3914将单个字符值写入MessageParcel实例。
3915
3916**系统能力**:SystemCapability.Communication.IPC.Core
3917
3918**参数:**
3919
3920  | 参数名 | 类型   | 必填 | 说明                 |
3921  | ------ | ------ | ---- | -------------------- |
3922  | val    | number | 是   | 要写入的单个字符值。 |
3923
3924**返回值:**
3925
3926  | 类型    | 说明                          |
3927  | ------- | ----------------------------- |
3928  | boolean | true:写入成功,false:写入失败。|
3929
3930**示例:**
3931
3932  ```ts
3933  let data = rpc.MessageParcel.create();
3934  let result = data.writeChar(97);
3935  console.log("RpcClient: writeChar is " + result);
3936  ```
3937
3938### readChar
3939
3940readChar(): number
3941
3942从MessageParcel实例中读取单个字符值。
3943
3944**系统能力**:SystemCapability.Communication.IPC.Core
3945
3946**返回值:**
3947
3948  | 类型   | 说明             |
3949  | ------ | ---------------- |
3950  | number | 返回单个字符值。 |
3951
3952**示例:**
3953
3954  ```ts
3955  let data = rpc.MessageParcel.create();
3956  let result = data.writeChar(97);
3957  console.log("RpcClient: writeChar is " + result);
3958  let ret = data.readChar();
3959  console.log("RpcClient: readChar is " + ret);
3960  ```
3961
3962### writeString
3963
3964writeString(val: string): boolean
3965
3966将字符串值写入MessageParcel实例。
3967
3968**系统能力**:SystemCapability.Communication.IPC.Core
3969
3970**参数:**
3971
3972  | 参数名 | 类型   | 必填 | 说明                                      |
3973  | ------ | ------ | ---- | ----------------------------------------- |
3974  | val    | string | 是   | 要写入的字符串值,其长度应小于40960字节。 |
3975
3976**返回值:**
3977
3978  | 类型    | 说明                              |
3979  | ------- | --------------------------------- |
3980  | boolean | true:写入成功,false:写入失败。|
3981
3982**示例:**
3983
3984  ```ts
3985  let data = rpc.MessageParcel.create();
3986  let result = data.writeString('abc');
3987  console.log("RpcClient: writeString  is " + result);
3988  ```
3989
3990### readString
3991
3992readString(): string
3993
3994从MessageParcel实例读取字符串值。
3995
3996**系统能力**:SystemCapability.Communication.IPC.Core
3997
3998**返回值:**
3999
4000  | 类型   | 说明           |
4001  | ------ | -------------- |
4002  | string | 返回字符串值。 |
4003
4004**示例:**
4005
4006  ```ts
4007  let data = rpc.MessageParcel.create();
4008  let result = data.writeString('abc');
4009  console.log("RpcClient: writeString  is " + result);
4010  let ret = data.readString();
4011  console.log("RpcClient: readString is " + ret);
4012  ```
4013
4014### writeSequenceable
4015
4016writeSequenceable(val: Sequenceable): boolean
4017
4018将自定义序列化对象写入MessageParcel实例。
4019
4020**系统能力**:SystemCapability.Communication.IPC.Core
4021
4022**参数:**
4023
4024  | 参数名 | 类型                          | 必填 | 说明                 |
4025  | ------ | ----------------------------- | ---- | -------------------- |
4026  | val    | [Sequenceable](#sequenceable) | 是   | 要写入的可序列对象。 |
4027
4028**返回值:**
4029
4030  | 类型    | 说明                              |
4031  | ------- | --------------------------------- |
4032  | boolean | true:写入成功,false:写入失败。|
4033
4034**示例:**
4035
4036  ```ts
4037  class MySequenceable {
4038      num: number;
4039      str: string;
4040      constructor(num, str) {
4041          this.num = num;
4042          this.str = str;
4043      }
4044      marshalling(messageParcel) {
4045          messageParcel.writeInt(this.num);
4046          messageParcel.writeString(this.str);
4047          return true;
4048      }
4049      unmarshalling(messageParcel) {
4050          this.num = messageParcel.readInt();
4051          this.str = messageParcel.readString();
4052          return true;
4053      }
4054  }
4055  let sequenceable = new MySequenceable(1, "aaa");
4056  let data = rpc.MessageParcel.create();
4057  let result = data.writeSequenceable(sequenceable);
4058  console.log("RpcClient: writeSequenceable is " + result);
4059  ```
4060
4061### readSequenceable
4062
4063readSequenceable(dataIn: Sequenceable): boolean
4064
4065从MessageParcel实例中读取成员变量到指定的对象(dataIn)。
4066
4067**系统能力**:SystemCapability.Communication.IPC.Core
4068
4069**参数:**
4070
4071  | 参数名 | 类型                          | 必填 | 说明                                    |
4072  | ------ | ----------------------------- | ---- | --------------------------------------- |
4073  | dataIn | [Sequenceable](#sequenceabledeprecated) | 是   | 需要从MessageParcel读取成员变量的对象。 |
4074
4075**返回值:**
4076
4077  | 类型    | 说明                                        |
4078  | ------- | ------------------------------------------- |
4079  | boolean | true:反序列化成功,false:反序列化失败。|
4080
4081**示例:**
4082
4083  ```ts
4084  class MySequenceable {
4085      num: number;
4086      str: string;
4087      constructor(num, str) {
4088          this.num = num;
4089          this.str = str;
4090      }
4091      marshalling(messageParcel) {
4092          messageParcel.writeInt(this.num);
4093          messageParcel.writeString(this.str);
4094          return true;
4095      }
4096      unmarshalling(messageParcel) {
4097          this.num = messageParcel.readInt();
4098          this.str = messageParcel.readString();
4099          return true;
4100      }
4101  }
4102  let sequenceable = new MySequenceable(1, "aaa");
4103  let data = rpc.MessageParcel.create();
4104  let result = data.writeSequenceable(sequenceable);
4105  console.log("RpcClient: writeSequenceable is " + result);
4106  let ret = new MySequenceable(0, "");
4107  let result2 = data.readSequenceable(ret);
4108  console.log("RpcClient: writeSequenceable is " + result2);
4109  ```
4110
4111### writeByteArray
4112
4113writeByteArray(byteArray: number[]): boolean
4114
4115将字节数组写入MessageParcel实例。
4116
4117**系统能力**:SystemCapability.Communication.IPC.Core
4118
4119**参数:**
4120
4121  | 参数名    | 类型     | 必填 | 说明               |
4122  | --------- | -------- | ---- | ------------------ |
4123  | byteArray | number[] | 是   | 要写入的字节数组。 |
4124
4125**返回值:**
4126
4127  | 类型    | 说明                              |
4128  | ------- | --------------------------------- |
4129  | boolean | true:写入成功,false:写入失败。|
4130
4131**示例:**
4132
4133  ```ts
4134  let data = rpc.MessageParcel.create();
4135  let ByteArrayVar = [1, 2, 3, 4, 5];
4136  let result = data.writeByteArray(ByteArrayVar);
4137  console.log("RpcClient: writeByteArray is " + result);
4138  ```
4139
4140### readByteArray
4141
4142readByteArray(dataIn: number[]): void
4143
4144从MessageParcel实例读取字节数组。
4145
4146**系统能力**:SystemCapability.Communication.IPC.Core
4147
4148**参数:**
4149
4150  | 参数名 | 类型     | 必填 | 说明               |
4151  | ------ | -------- | ---- | ------------------ |
4152  | dataIn | number[] | 是   | 要读取的字节数组。 |
4153
4154**示例:**
4155
4156  ```ts
4157  let data = rpc.MessageParcel.create();
4158  let ByteArrayVar = [1, 2, 3, 4, 5];
4159  let result = data.writeByteArray(ByteArrayVar);
4160  console.log("RpcClient: writeByteArray is " + result);
4161  let array = new Array(5);
4162  data.readByteArray(array);
4163  ```
4164
4165### readByteArray
4166
4167readByteArray(): number[]
4168
4169从MessageParcel实例中读取字节数组。
4170
4171**系统能力**:SystemCapability.Communication.IPC.Core
4172
4173**返回值:**
4174
4175  | 类型     | 说明           |
4176  | -------- | -------------- |
4177  | number[] | 返回字节数组。 |
4178
4179**示例:**
4180
4181  ```ts
4182  let data = rpc.MessageParcel.create();
4183  let ByteArrayVar = [1, 2, 3, 4, 5];
4184  let result = data.writeByteArray(ByteArrayVar);
4185  console.log("RpcClient: writeByteArray is " + result);
4186  let array = data.readByteArray();
4187  console.log("RpcClient: readByteArray is " + array);
4188  ```
4189
4190### writeShortArray
4191
4192writeShortArray(shortArray: number[]): boolean
4193
4194将短整数数组写入MessageParcel实例。
4195
4196**系统能力**:SystemCapability.Communication.IPC.Core
4197
4198**参数:**
4199
4200  | 参数名     | 类型     | 必填 | 说明                 |
4201  | ---------- | -------- | ---- | -------------------- |
4202  | shortArray | number[] | 是   | 要写入的短整数数组。 |
4203
4204**返回值:**
4205
4206  | 类型    | 说明                          |
4207  | ------- | ----------------------------- |
4208  | boolean | true:写入成功,false:写入失败。|
4209
4210**示例:**
4211
4212  ```ts
4213  let data = rpc.MessageParcel.create();
4214  let result = data.writeShortArray([11, 12, 13]);
4215  console.log("RpcClient: writeShortArray is " + result);
4216  ```
4217
4218### readShortArray
4219
4220readShortArray(dataIn: number[]): void
4221
4222从MessageParcel实例中读取短整数数组。
4223
4224**系统能力**:SystemCapability.Communication.IPC.Core
4225
4226**参数:**
4227
4228  | 参数名 | 类型     | 必填 | 说明                 |
4229  | ------ | -------- | ---- | -------------------- |
4230  | dataIn | number[] | 是   | 要读取的短整数数组。 |
4231
4232**示例:**
4233
4234  ```ts
4235  let data = rpc.MessageParcel.create();
4236  let result = data.writeShortArray([11, 12, 13]);
4237  console.log("RpcClient: writeShortArray is " + result);
4238  let array = new Array(3);
4239  data.readShortArray(array);
4240  ```
4241
4242### readShortArray
4243
4244readShortArray(): number[]
4245
4246从MessageParcel实例中读取短整数数组。
4247
4248**系统能力**:SystemCapability.Communication.IPC.Core
4249
4250**返回值:**
4251
4252  | 类型     | 说明             |
4253  | -------- | ---------------- |
4254  | number[] | 返回短整数数组。 |
4255
4256**示例:**
4257
4258  ```ts
4259  let data = rpc.MessageParcel.create();
4260  let result = data.writeShortArray([11, 12, 13]);
4261  console.log("RpcClient: writeShortArray is " + result);
4262  let array = data.readShortArray();
4263 console.log("RpcClient: readShortArray is " + array);
4264  ```
4265
4266### writeIntArray
4267
4268writeIntArray(intArray: number[]): boolean
4269
4270将整数数组写入MessageParcel实例。
4271
4272**系统能力**:SystemCapability.Communication.IPC.Core
4273
4274**参数:**
4275
4276  | 参数名   | 类型     | 必填 | 说明               |
4277  | -------- | -------- | ---- | ------------------ |
4278  | intArray | number[] | 是   | 要写入的整数数组。 |
4279
4280**返回值:**
4281
4282  | 类型    | 说明                          |
4283  | ------- | ----------------------------- |
4284  | boolean | true:写入成功,false:写入失败。|
4285
4286**示例:**
4287
4288  ```ts
4289  let data = rpc.MessageParcel.create();
4290  let result = data.writeIntArray([100, 111, 112]);
4291  console.log("RpcClient: writeIntArray is " + result);
4292  ```
4293
4294### readIntArray
4295
4296readIntArray(dataIn: number[]): void
4297
4298从MessageParcel实例中读取整数数组。
4299
4300**系统能力**:SystemCapability.Communication.IPC.Core
4301
4302**参数:**
4303
4304  | 参数名 | 类型     | 必填 | 说明               |
4305  | ------ | -------- | ---- | ------------------ |
4306  | dataIn | number[] | 是   | 要读取的整数数组。 |
4307
4308**示例:**
4309
4310  ```ts
4311  let data = rpc.MessageParcel.create();
4312  let result = data.writeIntArray([100, 111, 112]);
4313  console.log("RpcClient: writeIntArray is " + result);
4314  let array = new Array(3);
4315  data.readIntArray(array);
4316  ```
4317
4318### readIntArray
4319
4320readIntArray(): number[]
4321
4322从MessageParcel实例中读取整数数组。
4323
4324**系统能力**:SystemCapability.Communication.IPC.Core
4325
4326**返回值:**
4327
4328  | 类型     | 说明           |
4329  | -------- | -------------- |
4330  | number[] | 返回整数数组。 |
4331
4332**示例:**
4333
4334  ```ts
4335  let data = rpc.MessageParcel.create();
4336  let result = data.writeIntArray([100, 111, 112]);
4337  console.log("RpcClient: writeIntArray is " + result);
4338  let array = data.readIntArray();
4339  console.log("RpcClient: readIntArray is " + array);
4340  ```
4341
4342### writeLongArray
4343
4344writeLongArray(longArray: number[]): boolean
4345
4346将长整数数组写入MessageParcel实例。
4347
4348**系统能力**:SystemCapability.Communication.IPC.Core
4349
4350**参数:**
4351
4352  | 参数名    | 类型     | 必填 | 说明                 |
4353  | --------- | -------- | ---- | -------------------- |
4354  | longArray | number[] | 是   | 要写入的长整数数组。 |
4355
4356**返回值:**
4357
4358  | 类型    | 说明                          |
4359  | ------- | ----------------------------- |
4360  | boolean | true:写入成功,false:写入失败。|
4361
4362**示例:**
4363
4364  ```ts
4365  let data = rpc.MessageParcel.create();
4366  let result = data.writeLongArray([1111, 1112, 1113]);
4367  console.log("RpcClient: writeLongArray is " + result);
4368  ```
4369
4370### readLongArray
4371
4372readLongArray(dataIn: number[]): void
4373
4374从MessageParcel实例读取长整数数组。
4375
4376**系统能力**:SystemCapability.Communication.IPC.Core
4377
4378**参数:**
4379
4380  | 参数名 | 类型     | 必填 | 说明                 |
4381  | ------ | -------- | ---- | -------------------- |
4382  | dataIn | number[] | 是   | 要读取的长整数数组。 |
4383
4384**示例:**
4385
4386  ```ts
4387  let data = rpc.MessageParcel.create();
4388  let result = data.writeLongArray([1111, 1112, 1113]);
4389  console.log("RpcClient: writeLongArray is " + result);
4390  let array = new Array(3);
4391  data.readLongArray(array);
4392  ```
4393
4394### readLongArray
4395
4396readLongArray(): number[]
4397
4398从MessageParcel实例中读取长整数数组。
4399
4400**系统能力**:SystemCapability.Communication.IPC.Core
4401
4402**返回值:**
4403
4404 | 类型     | 说明             |
4405 | -------- | ---------------- |
4406 | number[] | 返回长整数数组。 |
4407
4408**示例:**
4409
4410  ```ts
4411  let data = rpc.MessageParcel.create();
4412  let result = data.writeLongArray([1111, 1112, 1113]);
4413  console.log("RpcClient: writeLongArray is " + result);
4414  let array = data.readLongArray();
4415  console.log("RpcClient: readLongArray is " + array);
4416  ```
4417
4418### writeFloatArray
4419
4420writeFloatArray(floatArray: number[]): boolean
4421
4422将浮点数组写入MessageParcel实例。
4423
4424**系统能力**:SystemCapability.Communication.IPC.Core
4425
4426**参数:**
4427
4428  | 参数名 | 类型 | 必填 | 说明 |
4429  | ---------- | -------- | ---- | --- |
4430  | floatArray | number[] | 是   | 要写入的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |
4431
4432**返回值:**
4433
4434  | 类型    | 说明                          |
4435  | ------- | ----------------------------- |
4436  | boolean | true:写入成功,false:写入失败。|
4437
4438**示例:**
4439
4440  ```ts
4441  let data = rpc.MessageParcel.create();
4442  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
4443  console.log("RpcClient: writeFloatArray is " + result);
4444  ```
4445
4446### readFloatArray
4447
4448readFloatArray(dataIn: number[]): void
4449
4450从MessageParcel实例中读取浮点数组。
4451
4452**系统能力**:SystemCapability.Communication.IPC.Core
4453
4454**参数:**
4455
4456  | 参数名 | 类型 | 必填 | 说明 |
4457  | ------ | -------- | ---- | ------ |
4458  | dataIn | number[] | 是   | 要读取的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |
4459
4460**示例:**
4461
4462  ```ts
4463  let data = rpc.MessageParcel.create();
4464  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
4465  console.log("RpcClient: writeFloatArray is " + result);
4466  let array = new Array(3);
4467  data.readFloatArray(array);
4468  ```
4469
4470### readFloatArray
4471
4472readFloatArray(): number[]
4473
4474从MessageParcel实例中读取浮点数组。
4475
4476**系统能力**:SystemCapability.Communication.IPC.Core
4477
4478**返回值:**
4479
4480  | 类型     | 说明           |
4481  | -------- | -------------- |
4482  | number[] | 返回浮点数组。 |
4483
4484**示例:**
4485
4486  ```ts
4487  let data = rpc.MessageParcel.create();
4488  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
4489  console.log("RpcClient: writeFloatArray is " + result);
4490  let array = data.readFloatArray();
4491  console.log("RpcClient: readFloatArray is " + array);
4492  ```
4493
4494### writeDoubleArray
4495
4496writeDoubleArray(doubleArray: number[]): boolean
4497
4498将双精度浮点数组写入MessageParcel实例。
4499
4500**系统能力**:SystemCapability.Communication.IPC.Core
4501
4502**参数:**
4503
4504  | 参数名      | 类型     | 必填 | 说明                     |
4505  | ----------- | -------- | ---- | ------------------------ |
4506  | doubleArray | number[] | 是   | 要写入的双精度浮点数组。 |
4507
4508**返回值:**
4509
4510  | 类型    | 说明                          |
4511  | ------- | ----------------------------- |
4512  | boolean | true:写入成功,false:写入失败。|
4513
4514**示例:**
4515
4516  ```ts
4517  let data = rpc.MessageParcel.create();
4518  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
4519  console.log("RpcClient: writeDoubleArray is " + result);
4520  ```
4521
4522### readDoubleArray
4523
4524readDoubleArray(dataIn: number[]): void
4525
4526从MessageParcel实例中读取双精度浮点数组。
4527
4528**系统能力**:SystemCapability.Communication.IPC.Core
4529
4530**参数:**
4531
4532  | 参数名 | 类型     | 必填 | 说明                     |
4533  | ------ | -------- | ---- | ------------------------ |
4534  | dataIn | number[] | 是   | 要读取的双精度浮点数组。 |
4535
4536**示例:**
4537
4538  ```ts
4539  let data = rpc.MessageParcel.create();
4540  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
4541  console.log("RpcClient: writeDoubleArray is " + result);
4542  let array = new Array(3);
4543  data.readDoubleArray(array);
4544  ```
4545
4546### readDoubleArray
4547
4548readDoubleArray(): number[]
4549
4550从MessageParcel实例读取双精度浮点数组。
4551
4552**系统能力**:SystemCapability.Communication.IPC.Core
4553
4554**返回值:**
4555
4556  | 类型     | 说明                 |
4557  | -------- | -------------------- |
4558  | number[] | 返回双精度浮点数组。 |
4559
4560**示例:**
4561
4562  ```ts
4563  let data = rpc.MessageParcel.create();
4564  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
4565  console.log("RpcClient: writeDoubleArray is " + result);
4566  let array = data.readDoubleArray();
4567  console.log("RpcClient: readDoubleArray is " + array);
4568  ```
4569
4570### writeBooleanArray
4571
4572writeBooleanArray(booleanArray: boolean[]): boolean
4573
4574将布尔数组写入MessageParcel实例。
4575
4576**系统能力**:SystemCapability.Communication.IPC.Core
4577
4578**参数:**
4579
4580  | 参数名       | 类型      | 必填 | 说明               |
4581  | ------------ | --------- | ---- | ------------------ |
4582  | booleanArray | boolean[] | 是   | 要写入的布尔数组。 |
4583
4584**返回值:**
4585
4586  | 类型    | 说明                              |
4587  | ------- | --------------------------------- |
4588  | boolean | true:写入成功,false:写入失败。|
4589
4590**示例:**
4591
4592  ```ts
4593  let data = rpc.MessageParcel.create();
4594  let result = data.writeBooleanArray([false, true, false]);
4595  console.log("RpcClient: writeBooleanArray is " + result);
4596  ```
4597
4598### readBooleanArray
4599
4600readBooleanArray(dataIn: boolean[]): void
4601
4602从MessageParcel实例中读取布尔数组。
4603
4604**系统能力**:SystemCapability.Communication.IPC.Core
4605
4606**参数:**
4607
4608  | 参数名 | 类型      | 必填 | 说明               |
4609  | ------ | --------- | ---- | ------------------ |
4610  | dataIn | boolean[] | 是   | 要读取的布尔数组。 |
4611
4612**示例:**
4613
4614  ```ts
4615  let data = rpc.MessageParcel.create();
4616  let result = data.writeBooleanArray([false, true, false]);
4617  console.log("RpcClient: writeBooleanArray is " + result);
4618  let array = new Array(3);
4619  data.readBooleanArray(array);
4620  ```
4621
4622### readBooleanArray
4623
4624readBooleanArray(): boolean[]
4625
4626从MessageParcel实例中读取布尔数组。
4627
4628**系统能力**:SystemCapability.Communication.IPC.Core
4629
4630**返回值:**
4631
4632  | 类型      | 说明           |
4633  | --------- | -------------- |
4634  | boolean[] | 返回布尔数组。 |
4635
4636**示例:**
4637
4638  ```ts
4639  let data = rpc.MessageParcel.create();
4640  let result = data.writeBooleanArray([false, true, false]);
4641  console.log("RpcClient: writeBooleanArray is " + result);
4642  let array = data.readBooleanArray();
4643  console.log("RpcClient: readBooleanArray is " + array);
4644  ```
4645
4646### writeCharArray
4647
4648writeCharArray(charArray: number[]): boolean
4649
4650将单个字符数组写入MessageParcel实例。
4651
4652**系统能力**:SystemCapability.Communication.IPC.Core
4653
4654**参数:**
4655
4656  | 参数名    | 类型     | 必填 | 说明                   |
4657  | --------- | -------- | ---- | ---------------------- |
4658  | charArray | number[] | 是   | 要写入的单个字符数组。 |
4659
4660**返回值:**
4661
4662  | 类型    | 说明                              |
4663  | ------- | --------------------------------- |
4664  | boolean | true:写入成功,false:写入失败。|
4665
4666**示例:**
4667
4668  ```ts
4669  let data = rpc.MessageParcel.create();
4670  let result = data.writeCharArray([97, 98, 88]);
4671  console.log("RpcClient: writeCharArray is " + result);
4672  ```
4673
4674### readCharArray
4675
4676readCharArray(dataIn: number[]): void
4677
4678从MessageParcel实例中读取单个字符数组。
4679
4680**系统能力**:SystemCapability.Communication.IPC.Core
4681
4682**参数:**
4683
4684  | 参数名 | 类型     | 必填 | 说明                   |
4685  | ------ | -------- | ---- | ---------------------- |
4686  | dataIn | number[] | 是   | 要读取的单个字符数组。 |
4687
4688**示例:**
4689
4690  ```ts
4691  let data = rpc.MessageParcel.create();
4692  let result = data.writeCharArray([97, 98, 99]);
4693  console.log("RpcClient: writeCharArray is " + result);
4694  let array = new Array(3);
4695  data.readCharArray(array);
4696  ```
4697
4698### readCharArray
4699
4700readCharArray(): number[]
4701
4702从MessageParcel实例读取单个字符数组。
4703
4704**系统能力**:SystemCapability.Communication.IPC.Core
4705
4706**返回值:**
4707
4708  | 类型     | 说明               |
4709  | -------- | ------------------ |
4710  | number[] | 返回单个字符数组。 |
4711
4712**示例:**
4713
4714  ```ts
4715  let data = rpc.MessageParcel.create();
4716  let result = data.writeCharArray([97, 98, 99]);
4717  console.log("RpcClient: writeCharArray is " + result);
4718  let array = data.readCharArray();
4719  console.log("RpcClient: readCharArray is " + array);
4720  ```
4721
4722### writeStringArray
4723
4724writeStringArray(stringArray: string[]): boolean
4725
4726将字符串数组写入MessageParcel实例。
4727
4728**系统能力**:SystemCapability.Communication.IPC.Core
4729
4730**参数:**
4731
4732  | 参数名      | 类型     | 必填 | 说明 |
4733  | ----------- | -------- | ---- | ---------------- |
4734  | stringArray | string[] | 是   | 要写入的字符串数组,数组单个元素的长度应小于40960字节。 |
4735
4736**返回值:**
4737
4738  | 类型    | 说明 |
4739  | ------- | --------------------------------- |
4740  | boolean | true:写入成功,false:写入失败。|
4741
4742**示例:**
4743
4744  ```ts
4745  let data = rpc.MessageParcel.create();
4746  let result = data.writeStringArray(["abc", "def"]);
4747  console.log("RpcClient: writeStringArray is " + result);
4748  ```
4749
4750### readStringArray
4751
4752readStringArray(dataIn: string[]): void
4753
4754从MessageParcel实例读取字符串数组。
4755
4756**系统能力**:SystemCapability.Communication.IPC.Core
4757
4758**参数:**
4759
4760  | 参数名 | 类型     | 必填 | 说明                 |
4761  | ------ | -------- | ---- | -------------------- |
4762  | dataIn | string[] | 是   | 要读取的字符串数组。 |
4763
4764**示例:**
4765
4766  ```ts
4767  let data = rpc.MessageParcel.create();
4768  let result = data.writeStringArray(["abc", "def"]);
4769  console.log("RpcClient: writeStringArray is " + result);
4770  let array = new Array(2);
4771  data.readStringArray(array);
4772  ```
4773
4774### readStringArray
4775
4776readStringArray(): string[]
4777
4778从MessageParcel实例读取字符串数组。
4779
4780**系统能力**:SystemCapability.Communication.IPC.Core
4781
4782**返回值:**
4783
4784  | 类型     | 说明             |
4785  | -------- | ---------------- |
4786  | string[] | 返回字符串数组。 |
4787
4788**示例:**
4789
4790  ```ts
4791  let data = rpc.MessageParcel.create();
4792  let result = data.writeStringArray(["abc", "def"]);
4793  console.log("RpcClient: writeStringArray is " + result);
4794  let array = data.readStringArray();
4795  console.log("RpcClient: readStringArray is " + array);
4796  ```
4797
4798### writeNoException<sup>8+</sup>
4799
4800writeNoException(): void
4801
4802向MessageParcel写入“指示未发生异常”的信息。
4803
4804**系统能力**:SystemCapability.Communication.IPC.Core
4805
4806**示例:**
4807
4808  ```ts
4809  class MyDeathRecipient {
4810      onRemoteDied() {
4811          console.log("server died");
4812      }
4813  }
4814  class TestRemoteObject extends rpc.RemoteObject {
4815      constructor(descriptor) {
4816          super(descriptor);
4817      }
4818      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
4819          return true;
4820      }
4821      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
4822          return true;
4823      }
4824      isObjectDead(): boolean {
4825          return false;
4826      }
4827      onRemoteRequest(code, data, reply, option) {
4828          if (code === 1) {
4829              console.log("RpcServer: onRemoteRequest called");
4830              reply.writeNoException();
4831              return true;
4832          } else {
4833              console.log("RpcServer: unknown code: " + code);
4834              return false;
4835          }
4836      }
4837  }
4838  ```
4839
4840### readException<sup>8+</sup>
4841
4842readException(): void
4843
4844从MessageParcel中读取异常。
4845
4846**系统能力**:SystemCapability.Communication.IPC.Core
4847
4848**示例:**
4849
4850  获取服务
4851
4852  ```ts
4853  import FA from "@ohos.ability.featureAbility";
4854  let proxy;
4855  let connect = {
4856      onConnect: function(elementName, remoteProxy) {
4857          console.log("RpcClient: js onConnect called.");
4858          proxy = remoteProxy;
4859      },
4860      onDisconnect: function(elementName) {
4861          console.log("RpcClient: onDisconnect");
4862      },
4863      onFailed: function() {
4864          console.log("RpcClient: onFailed");
4865      }
4866  };
4867  let want = {
4868      "bundleName": "com.ohos.server",
4869      "abilityName": "com.ohos.server.MainAbility",
4870  };
4871  FA.connectAbility(want, connect);
4872  ```
4873
4874  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息
4875
4876  ```ts
4877  let option = new rpc.MessageOption();
4878  let data = rpc.MessageParcel.create();
4879  let reply = rpc.MessageParcel.create();
4880  data.writeInt(1);
4881  data.writeString("hello");
4882  proxy.sendMessageRequest(1, data, reply, option)
4883      .then(function(errCode) {
4884          if (errCode === 0) {
4885              console.log("sendMessageRequest got result");
4886              reply.readException();
4887              let msg = reply.readString();
4888              console.log("RPCTest: reply msg: " + msg);
4889          } else {
4890              console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode);
4891          }
4892      }).catch(function(e) {
4893          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
4894      }).finally (() => {
4895          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
4896          data.reclaim();
4897          reply.reclaim();
4898      });
4899  ```
4900
4901### writeSequenceableArray
4902
4903writeSequenceableArray(sequenceableArray: Sequenceable[]): boolean
4904
4905将可序列化对象数组写入MessageParcel实例。
4906
4907**系统能力**:SystemCapability.Communication.IPC.Core
4908
4909**参数:**
4910
4911  | 参数名            | 类型           | 必填 | 说明                       |
4912  | ----------------- | -------------- | ---- | -------------------------- |
4913  | sequenceableArray | Sequenceable[] | 是   | 要写入的可序列化对象数组。 |
4914
4915**返回值:**
4916
4917  | 类型    | 说明                              |
4918  | ------- | --------------------------------- |
4919  | boolean | true:写入成功,false:写入失败。|
4920
4921**示例:**
4922
4923  ```ts
4924  class MySequenceable {
4925      num: number;
4926      str: string;
4927      constructor(num, str) {
4928          this.num = num;
4929          this.str = str;
4930      }
4931      marshalling(messageParcel) {
4932          messageParcel.writeInt(this.num);
4933          messageParcel.writeString(this.str);
4934          return true;
4935      }
4936      unmarshalling(messageParcel) {
4937          this.num = messageParcel.readInt();
4938          this.str = messageParcel.readString();
4939          return true;
4940      }
4941  }
4942  let sequenceable = new MySequenceable(1, "aaa");
4943  let sequenceable2 = new MySequenceable(2, "bbb");
4944  let sequenceable3 = new MySequenceable(3, "ccc");
4945  let a = [sequenceable, sequenceable2, sequenceable3];
4946  let data = rpc.MessageParcel.create();
4947  let result = data.writeSequenceableArray(a);
4948  console.log("RpcClient: writeSequenceableArray is " + result);
4949  ```
4950
4951### readSequenceableArray<sup>8+</sup>
4952
4953readSequenceableArray(sequenceableArray: Sequenceable[]): void
4954
4955从MessageParcel实例读取可序列化对象数组。
4956
4957**系统能力**:SystemCapability.Communication.IPC.Core
4958
4959**参数:**
4960
4961  | 参数名            | 类型           | 必填 | 说明                       |
4962  | ----------------- | -------------- | ---- | -------------------------- |
4963  | sequenceableArray | Sequenceable[] | 是   | 要读取的可序列化对象数组。 |
4964
4965**示例:**
4966
4967  ```ts
4968  class MySequenceable {
4969      num: number;
4970      str: string;
4971      constructor(num, str) {
4972          this.num = num;
4973          this.str = str;
4974      }
4975      marshalling(messageParcel) {
4976          messageParcel.writeInt(this.num);
4977          messageParcel.writeString(this.str);
4978          return true;
4979      }
4980      unmarshalling(messageParcel) {
4981          this.num = messageParcel.readInt();
4982          this.str = messageParcel.readString();
4983          return true;
4984      }
4985  }
4986  let sequenceable = new MySequenceable(1, "aaa");
4987  let sequenceable2 = new MySequenceable(2, "bbb");
4988  let sequenceable3 = new MySequenceable(3, "ccc");
4989  let a = [sequenceable, sequenceable2, sequenceable3];
4990  let data = rpc.MessageParcel.create();
4991  let result = data.writeSequenceableArray(a);
4992  console.log("RpcClient: writeSequenceableArray is " + result);
4993  let b = [new MySequenceable(0, ""), new MySequenceable(0, ""), new MySequenceable(0, "")];
4994  data.readSequenceableArray(b);
4995  ```
4996
4997### writeRemoteObjectArray<sup>8+</sup>
4998
4999writeRemoteObjectArray(objectArray: IRemoteObject[]): boolean
5000
5001将IRemoteObject对象数组写入MessageParcel。
5002
5003**系统能力**:SystemCapability.Communication.IPC.Core
5004
5005**参数:**
5006
5007  | 参数名      | 类型            | 必填 | 说明 |
5008  | ----------- | --------------- | ---- | ----- |
5009  | objectArray | IRemoteObject[] | 是   | 要写入MessageParcel的IRemoteObject对象数组。 |
5010
5011**返回值:**
5012
5013  | 类型    | 说明                                                                                                                 |
5014  | ------- | -------------------------------------------------------------------------------------------------------------------- |
5015  | boolean | true:写入成功,false:写入失败。|
5016
5017**示例:**
5018
5019  ```ts
5020  class MyDeathRecipient {
5021      onRemoteDied() {
5022          console.log("server died");
5023      }
5024  }
5025  class TestRemoteObject extends rpc.RemoteObject {
5026      constructor(descriptor) {
5027          super(descriptor);
5028          this.attachLocalInterface(this, descriptor);
5029      }
5030      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5031          return true;
5032      }
5033      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5034          return true;
5035      }
5036      isObjectDead(): boolean {
5037          return false;
5038      }
5039      asObject(): rpc.IRemoteObject {
5040          return this;
5041      }
5042  }
5043  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
5044  let data = rpc.MessageParcel.create();
5045  let result = data.writeRemoteObjectArray(a);
5046  console.log("RpcClient: writeRemoteObjectArray is " + result);
5047  ```
5048
5049### readRemoteObjectArray<sup>8+</sup>
5050
5051readRemoteObjectArray(objects: IRemoteObject[]): void
5052
5053从MessageParcel读取IRemoteObject对象数组。
5054
5055**系统能力**:SystemCapability.Communication.IPC.Core
5056
5057**参数:**
5058
5059  | 参数名  | 类型            | 必填 | 说明 |
5060  | ------- | --------------- | ---- | --------- |
5061  | objects | IRemoteObject[] | 是   | 从MessageParcel读取的IRemoteObject对象数组。 |
5062
5063**示例:**
5064
5065  ```ts
5066  class MyDeathRecipient {
5067      onRemoteDied() {
5068          console.log("server died");
5069      }
5070  }
5071  class TestRemoteObject extends rpc.RemoteObject {
5072      constructor(descriptor) {
5073          super(descriptor);
5074          this.attachLocalInterface(this, descriptor);
5075      }
5076      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5077          return true;
5078      }
5079      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5080          return true;
5081      }
5082      isObjectDead(): boolean {
5083         return false;
5084      }
5085      asObject(): rpc.IRemoteObject {
5086          return this;
5087      }
5088  }
5089  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
5090  let data = rpc.MessageParcel.create();
5091  let result = data.writeRemoteObjectArray(a);
5092  let b = new Array(3);
5093  data.readRemoteObjectArray(b);
5094  ```
5095
5096### readRemoteObjectArray<sup>8+</sup>
5097
5098readRemoteObjectArray(): IRemoteObject[]
5099
5100从MessageParcel读取IRemoteObject对象数组。
5101
5102**系统能力**:SystemCapability.Communication.IPC.Core
5103
5104**返回值:**
5105
5106  | 类型 | 说明 |
5107  | --------------- | -------- |
5108  | IRemoteObject[] | 返回IRemoteObject对象数组。 |
5109
5110**示例:**
5111
5112  ```ts
5113  class MyDeathRecipient {
5114      onRemoteDied() {
5115          console.log("server died");
5116      }
5117  }
5118  class TestRemoteObject extends rpc.RemoteObject {
5119      constructor(descriptor) {
5120          super(descriptor);
5121          this.attachLocalInterface(this, descriptor);
5122      }
5123      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5124          return true;
5125      }
5126      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
5127          return true;
5128      }
5129      isObjectDead(): boolean {
5130          return false;
5131      }
5132      asObject(): rpc.IRemoteObject {
5133          return this;
5134      }
5135  }
5136  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
5137  let data = rpc.MessageParcel.create();
5138  let result = data.writeRemoteObjectArray(a);
5139  console.log("RpcClient: readRemoteObjectArray is " + result);
5140  let b = data.readRemoteObjectArray();
5141  console.log("RpcClient: readRemoteObjectArray is " + b);
5142  ```
5143
5144### closeFileDescriptor<sup>8+</sup>
5145
5146static closeFileDescriptor(fd: number): void
5147
5148静态方法,关闭给定的文件描述符。
5149
5150**系统能力**:SystemCapability.Communication.IPC.Core
5151
5152**参数:**
5153
5154  | 参数名 | 类型   | 必填 | 说明                 |
5155  | ------ | ------ | ---- | -------------------- |
5156  | fd     | number | 是   | 要关闭的文件描述符。 |
5157
5158**示例:**
5159
5160  ```ts
5161  import fileio from '@ohos.fileio';
5162  let filePath = "path/to/file";
5163  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
5164  rpc.MessageParcel.closeFileDescriptor(fd);
5165  ```
5166
5167### dupFileDescriptor<sup>8+</sup>
5168
5169static dupFileDescriptor(fd: number) :number
5170
5171静态方法,复制给定的文件描述符。
5172
5173**系统能力**:SystemCapability.Communication.IPC.Core
5174
5175**参数:**
5176
5177  | 参数名 | 类型   | 必填 | 说明                     |
5178  | ------ | ------ | ---- | ------------------------ |
5179  | fd     | number | 是   | 表示已存在的文件描述符。 |
5180
5181**返回值:**
5182
5183  | 类型   | 说明                 |
5184  | ------ | -------------------- |
5185  | number | 返回新的文件描述符。 |
5186
5187**示例:**
5188
5189  ```ts
5190  import fileio from '@ohos.fileio';
5191  let filePath = "path/to/file";
5192  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
5193  let newFd = rpc.MessageParcel.dupFileDescriptor(fd);
5194  ```
5195
5196### containFileDescriptors<sup>8+</sup>
5197
5198containFileDescriptors(): boolean
5199
5200检查此MessageParcel对象是否包含文件描述符。
5201
5202**系统能力**:SystemCapability.Communication.IPC.Core
5203
5204**返回值:**
5205
5206  | 类型    | 说明                                                               |
5207  | ------- | ------------------------------------------------------------------ |
5208  | boolean |true:包含文件描述符,false:未包含文件描述符。|
5209
5210**示例:**
5211
5212  ```ts
5213  import fileio from '@ohos.fileio';
5214  let parcel = new rpc.MessageParcel();
5215  let filePath = "path/to/file";
5216  let r1 = parcel.containFileDescriptors();
5217  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
5218  let writeResult = parcel.writeFileDescriptor(fd);
5219  console.log("RpcTest: parcel writeFd result is : " + writeResult);
5220  let containFD = parcel.containFileDescriptors();
5221  console.log("RpcTest: parcel after write fd containFd result is : " + containFD);
5222  ```
5223
5224### writeFileDescriptor<sup>8+</sup>
5225
5226writeFileDescriptor(fd: number): boolean
5227
5228写入文件描述符到MessageParcel。
5229
5230**系统能力**:SystemCapability.Communication.IPC.Core
5231
5232**参数:**
5233
5234  | 参数名 | 类型   | 必填 | 说明         |
5235  | ------ | ------ | ---- | ------------ |
5236  | fd     | number | 是   | 文件描述符。 |
5237
5238**返回值:**
5239
5240  | 类型    | 说明                                      |
5241  | ------- | ----------------------------------------- |
5242  | boolean | true:操作成功,false:操作失败。|
5243
5244**示例:**
5245
5246  ```ts
5247  import fileio from '@ohos.fileio';
5248  let parcel = new rpc.MessageParcel();
5249  let filePath = "path/to/file";
5250  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
5251  let writeResult = parcel.writeFileDescriptor(fd);
5252  console.log("RpcTest: parcel writeFd result is : " + writeResult);
5253  ```
5254
5255### readFileDescriptor<sup>8+</sup>
5256
5257readFileDescriptor(): number
5258
5259从MessageParcel中读取文件描述符。
5260
5261**系统能力**:SystemCapability.Communication.IPC.Core
5262
5263**返回值:**
5264
5265  | 类型   | 说明             |
5266  | ------ | ---------------- |
5267  | number | 返回文件描述符。 |
5268
5269**示例:**
5270
5271  ```ts
5272  import fileio from '@ohos.fileio';
5273  let parcel = new rpc.MessageParcel();
5274  let filePath = "path/to/file";
5275  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
5276  let writeResult = parcel.writeFileDescriptor(fd);
5277  let readFD = parcel.readFileDescriptor();
5278  console.log("RpcTest: parcel read fd is : " + readFD);
5279  ```
5280
5281### writeAshmem<sup>8+</sup>
5282
5283writeAshmem(ashmem: Ashmem): boolean
5284
5285将指定的匿名共享对象写入此MessageParcel。
5286
5287**系统能力**:SystemCapability.Communication.IPC.Core
5288
5289**参数:**
5290
5291  | 参数名 | 类型   | 必填 | 说明                                |
5292  | ------ | ------ | ---- | ----------------------------------- |
5293  | ashmem | Ashmem | 是   | 要写入MessageParcel的匿名共享对象。 |
5294
5295**返回值:**
5296
5297  | 类型    | 说明                                                                 |
5298  | ------- | -------------------------------------------------------------------- |
5299  | boolean | true:写入成功,false:写入失败。|
5300
5301**示例:**
5302
5303  ```ts
5304  let parcel = new rpc.MessageParcel();
5305  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
5306  let isWriteSuccess = parcel.writeAshmem(ashmem);
5307  console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
5308  ```
5309
5310### readAshmem<sup>8+</sup>
5311
5312readAshmem(): Ashmem
5313
5314从MessageParcel读取匿名共享对象。
5315
5316**系统能力**:SystemCapability.Communication.IPC.Core
5317
5318**返回值:**
5319
5320  | 类型   | 说明               |
5321  | ------ | ------------------ |
5322  | Ashmem | 返回匿名共享对象。 |
5323
5324**示例:**
5325
5326  ```ts
5327  let parcel = new rpc.MessageParcel();
5328  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
5329  let isWriteSuccess = parcel.writeAshmem(ashmem);
5330  console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
5331  let readAshmem = parcel.readAshmem();
5332  console.log("RpcTest: read ashmem to result is : " + readAshmem);
5333  ```
5334
5335### getRawDataCapacity<sup>8+</sup>
5336
5337getRawDataCapacity(): number
5338
5339获取MessageParcel可以容纳的最大原始数据量。
5340
5341**系统能力**:SystemCapability.Communication.IPC.Core
5342
5343**返回值:**
5344
5345  | 类型   | 说明                                                       |
5346  | ------ | ---------------------------------------------------------- |
5347  | number | 返回MessageParcel可以容纳的最大原始数据量,即128&nbsp;Mb。 |
5348
5349**示例:**
5350
5351  ```ts
5352  let parcel = new rpc.MessageParcel();
5353  let result = parcel.getRawDataCapacity();
5354  console.log("RpcTest: parcel get RawDataCapacity result is : " + result);
5355  ```
5356
5357### writeRawData<sup>8+</sup>
5358
5359writeRawData(rawData: number[], size: number): boolean
5360
5361将原始数据写入MessageParcel对象。
5362
5363**系统能力**:SystemCapability.Communication.IPC.Core
5364
5365**参数:**
5366
5367  | 参数名  | 类型     | 必填 | 说明                               |
5368  | ------- | -------- | ---- | ---------------------------------- |
5369  | rawData | number[] | 是   | 要写入的原始数据。                 |
5370  | size    | number   | 是   | 发送的原始数据大小,以字节为单位。 |
5371
5372**返回值:**
5373
5374  | 类型    | 说明                                      |
5375  | ------- | ----------------------------------------- |
5376  | boolean | true:写入成功,false:写入失败。|
5377
5378**示例:**
5379
5380  ```ts
5381  let parcel = new rpc.MessageParcel();
5382  let arr = [1, 2, 3, 4, 5];
5383  let isWriteSuccess = parcel.writeRawData(arr, arr.length);
5384  console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
5385  ```
5386
5387### readRawData<sup>8+</sup>
5388
5389readRawData(size: number): number[]
5390
5391从MessageParcel读取原始数据。
5392
5393**系统能力**:SystemCapability.Communication.IPC.Core
5394
5395**参数:**
5396
5397  | 参数名 | 类型   | 必填 | 说明                     |
5398  | ------ | ------ | ---- | ------------------------ |
5399  | size   | number | 是   | 要读取的原始数据的大小。 |
5400
5401**返回值:**
5402
5403  | 类型     | 说明                           |
5404  | -------- | ------------------------------ |
5405  | number[] | 返回原始数据(以字节为单位)。 |
5406
5407**示例:**
5408
5409  ```ts
5410  let parcel = new rpc.MessageParcel();
5411  let arr = [1, 2, 3, 4, 5];
5412  let isWriteSuccess = parcel.writeRawData(arr, arr.length);
5413  console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
5414  let result = parcel.readRawData(5);
5415  console.log("RpcTest: parcel read raw data result is : " + result);
5416  ```
5417
5418## Parcelable<sup>9+</sup>
5419
5420在进程间通信(IPC)期间,将类的对象写入MessageSequence并从MessageSequence中恢复它们。
5421
5422### marshalling
5423
5424marshalling(dataOut: MessageSequence): boolean
5425
5426将此可序列对象封送到MessageSequence中。
5427
5428**系统能力**:SystemCapability.Communication.IPC.Core
5429
5430**参数:**
5431
5432  | 参数名  | 类型            | 必填 | 说明                                        |
5433  | ------- | --------------- | ---- | ------------------------------------------- |
5434  | dataOut | MessageSequence | 是   | 可序列对象将被封送到的MessageSequence对象。 |
5435
5436**返回值:**
5437
5438  | 类型    | 说明                                      |
5439  | ------- | ----------------------------------------- |
5440  | boolean | true:封送成功,false:封送失败。
5441**示例:**
5442
5443  ```ts
5444  class MyParcelable {
5445      num: number;
5446      str: string;
5447      constructor(num, str) {
5448          this.num = num;
5449          this.str = str;
5450      }
5451      marshalling(messageSequence) {
5452          messageSequence.writeInt(this.num);
5453          messageSequence.writeString(this.str);
5454          return true;
5455      }
5456      unmarshalling(messageSequence) {
5457          this.num = messageSequence.readInt();
5458          this.str = messageSequence.readString();
5459          return true;
5460      }
5461  }
5462  let parcelable = new MyParcelable(1, "aaa");
5463  let data = rpc.MessageSequence.create();
5464  let result = data.writeParcelable(parcelable);
5465  console.log("RpcClient: writeParcelable is " + result);
5466  let ret = new MyParcelable(0, "");
5467  let result2 = data.readParcelable(ret);
5468  console.log("RpcClient: readParcelable is " + result2);
5469  ```
5470
5471### unmarshalling
5472
5473unmarshalling(dataIn: MessageSequence): boolean
5474
5475从MessageSequence中解封此可序列对象。
5476
5477**系统能力**:SystemCapability.Communication.IPC.Core
5478
5479**参数:**
5480
5481  | 参数名 | 类型            | 必填 | 说明                                            |
5482  | ------ | --------------- | ---- | ----------------------------------------------- |
5483  | dataIn | MessageSequence | 是   | 已将可序列对象封送到其中的MessageSequence对象。 |
5484
5485**返回值:**
5486
5487  | 类型    | 说明                                          |
5488  | ------- | --------------------------------------------- |
5489  | boolean | true:反序列化成功,false:反序列化失败。|
5490
5491**示例:**
5492
5493  ```ts
5494  class MyParcelable {
5495      num: number;
5496      str: string;
5497      constructor(num, str) {
5498          this.num = num;
5499          this.str = str;
5500      }
5501      marshalling(messageSequence) {
5502          messageSequence.writeInt(this.num);
5503          messageSequence.writeString(this.str);
5504          return true;
5505      }
5506      unmarshalling(messageSequence) {
5507          this.num = messageSequence.readInt();
5508          this.str = messageSequence.readString();
5509          return true;
5510      }
5511  }
5512  let parcelable = new MyParcelable(1, "aaa");
5513  let data = rpc.MessageSequence.create();
5514  let result = data.writeParcelable(parcelable);
5515  console.log("RpcClient: writeParcelable is " + result);
5516  let ret = new MyParcelable(0, "");
5517  let result2 = data.readParcelable(ret);
5518  console.log("RpcClient: readParcelable is " + result2);
5519  ```
5520
5521## Sequenceable<sup>(deprecated)</sup>
5522
5523>从API version 9 开始不再维护,建议使用[Parcelable](#parcelable9)类替代。
5524
5525在进程间通信(IPC)期间,将类的对象写入MessageParcel并从MessageParcel中恢复它们。
5526
5527### marshalling
5528
5529marshalling(dataOut: MessageParcel): boolean
5530
5531将此可序列对象封送到MessageParcel中。
5532
5533**系统能力**:SystemCapability.Communication.IPC.Core
5534
5535**参数:**
5536
5537  | 参数名  | 类型                            | 必填 | 说明                                      |
5538  | ------- | ------------------------------- | ---- | ----------------------------------------- |
5539  | dataOut | [MessageParcel](#messageparceldeprecated) | 是   | 可序列对象将被封送到的MessageParcel对象。 |
5540
5541**返回值:**
5542
5543  | 类型    | 说明                                      |
5544  | ------- | ----------------------------------------- |
5545  | boolean | true:封送成功,false:封送失败。
5546**示例:**
5547
5548  ```ts
5549  class MySequenceable {
5550      num: number;
5551      str: string;
5552      constructor(num, str) {
5553          this.num = num;
5554          this.str = str;
5555      }
5556      marshalling(messageParcel) {
5557          messageParcel.writeInt(this.num);
5558          messageParcel.writeString(this.str);
5559          return true;
5560      }
5561      unmarshalling(messageParcel) {
5562          this.num = messageParcel.readInt();
5563          this.str = messageParcel.readString();
5564          return true;
5565      }
5566  }
5567  let sequenceable = new MySequenceable(1, "aaa");
5568  let data = rpc.MessageParcel.create();
5569  let result = data.writeSequenceable(sequenceable);
5570  console.log("RpcClient: writeSequenceable is " + result);
5571  let ret = new MySequenceable(0, "");
5572  let result2 = data.readSequenceable(ret);
5573  console.log("RpcClient: readSequenceable is " + result2);
5574  ```
5575
5576### unmarshalling
5577
5578unmarshalling(dataIn: MessageParcel): boolean
5579
5580从MessageParcel中解封此可序列对象。
5581
5582**系统能力**:SystemCapability.Communication.IPC.Core
5583
5584**参数:**
5585
5586  | 参数名 | 类型                            | 必填 | 说明                                          |
5587  | ------ | ------------------------------- | ---- | --------------------------------------------- |
5588  | dataIn | [MessageParcel](#messageparceldeprecated) | 是   | 已将可序列对象封送到其中的MessageParcel对象。 |
5589
5590**返回值:**
5591
5592  | 类型    | 说明                                          |
5593  | ------- | --------------------------------------------- |
5594  | boolean | true:反序列化成功,false:反序列化失败。|
5595
5596**示例:**
5597
5598  ```ts
5599  class MySequenceable {
5600      num: number;
5601      str: string;
5602      constructor(num, str) {
5603          this.num = num;
5604          this.str = str;
5605      }
5606      marshalling(messageParcel) {
5607          messageParcel.writeInt(this.num);
5608          messageParcel.writeString(this.str);
5609          return true;
5610      }
5611      unmarshalling(messageParcel) {
5612          this.num = messageParcel.readInt();
5613          this.str = messageParcel.readString();
5614          return true;
5615      }
5616  }
5617  let sequenceable = new MySequenceable(1, "aaa");
5618  let data = rpc.MessageParcel.create();
5619  let result = data.writeSequenceable(sequenceable);
5620  console.log("RpcClient: writeSequenceable is " + result);
5621  let ret = new MySequenceable(0, "");
5622  let result2 = data.readSequenceable(ret);
5623  console.log("RpcClient: readSequenceable is " + result2);
5624  ```
5625
5626## IRemoteBroker
5627
5628远端对象的代理持有者。用于获取代理对象。
5629
5630### asObject
5631
5632asObject(): IRemoteObject
5633
5634需派生类实现,获取代理或远端对象。
5635
5636**系统能力**:SystemCapability.Communication.IPC.Core
5637
5638**返回值:**
5639
5640  | 类型  | 说明 |
5641  | ---- | ----- |
5642  | [IRemoteObject](#iremoteobject) | 如果调用者是RemoteObject对象,则直接返回本身;如果调用者是[RemoteProxy](#remoteproxy)对象,则返回它的持有者[IRemoteObject](#iremoteobject)。 |
5643
5644**示例:**
5645
5646  ```ts
5647  class TestAbility extends rpc.RemoteObject {
5648      asObject() {
5649          return this;
5650      }
5651  }
5652  let remoteObject = new TestAbility("testObject").asObject();
5653  ```
5654
5655**示例:**
5656
5657  获取服务
5658
5659  ```ts
5660  import FA from "@ohos.ability.featureAbility";
5661  let proxy;
5662  let connect = {
5663      onConnect: function (elementName, remoteProxy) {
5664          console.log("RpcClient: js onConnect called.");
5665          proxy = remoteProxy;
5666      },
5667      onDisconnect: function (elementName) {
5668          console.log("RpcClient: onDisconnect");
5669      },
5670      onFailed: function () {
5671          console.log("RpcClient: onFailed");
5672      }
5673  };
5674  let want = {
5675      "bundleName": "com.ohos.server",
5676      "abilityName": "com.ohos.server.MainAbility",
5677  };
5678  FA.connectAbility(want, connect);
5679  ```
5680
5681  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的asObject接口方法获取代理或远端对象
5682
5683  ```ts
5684  class TestProxy {
5685      remote: rpc.RemoteObject;
5686      constructor(remote) {
5687          this.remote = remote;
5688      }
5689      asObject() {
5690          return this.remote;
5691      }
5692  }
5693  let iRemoteObject = new TestProxy(proxy).asObject();
5694
5695  ```
5696
5697## DeathRecipient
5698
5699用于订阅远端对象的死亡通知。当被订阅该通知的远端对象死亡时,本端可收到消息,调用[onRemoteDied](#onremotedied)接口。远端对象死亡可以为远端对象所在进程死亡,远端对象所在设备关机或重启,当远端对象与本端对象属于不同设备时,也可为远端对象离开组网时。
5700
5701### onRemoteDied
5702
5703onRemoteDied(): void
5704
5705在成功添加死亡通知订阅后,当远端对象死亡时,将自动调用本方法。
5706
5707**系统能力**:SystemCapability.Communication.IPC.Core
5708
5709**示例:**
5710
5711  ```ts
5712  class MyDeathRecipient {
5713      onRemoteDied() {
5714          console.log("server died");
5715      }
5716  }
5717  ```
5718
5719## RequestResult<sup>9+</sup>
5720
5721发送请求的响应结果。
5722
5723**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core5724
5725  | 名称    | 类型            | 可读 | 可写 | 说明                                  |
5726  | ------- | --------------- | ---- | ---- |-------------------------------------- |
5727  | errCode | number          | 是   | 否   | 错误码。                              |
5728  | code    | number          | 是   | 否   | 消息代码。                            |
5729  | data    | MessageSequence | 是   | 否   | 发送给对端进程的MessageSequence对象。 |
5730  | reply   | MessageSequence | 是   | 否   | 对端进程返回的MessageSequence对象。   |
5731
5732## SendRequestResult<sup>8+(deprecated)</sup>
5733
5734>从API version 9 开始不再维护,建议使用[RequestResult](#requestresult9)类替代。
5735
5736发送请求的响应结果。
5737
5738**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core5739
5740  | 名称    | 类型          | 可读 | 可写 | 说明                                |
5741  | ------- | ------------- | ---- | ---- | ----------------------------------- |
5742  | errCode | number        | 是   | 否   | 错误码。                            |
5743  | code    | number        | 是   | 否   | 消息代码。                          |
5744  | data    | MessageParcel | 是   | 否   | 发送给对端进程的MessageParcel对象。 |
5745  | reply   | MessageParcel | 是   | 否   | 对端进程返回的MessageParcel对象。   |
5746
5747## IRemoteObject
5748
5749该接口可用于查询或获取接口描述符、添加或删除死亡通知、转储对象状态到特定文件、发送消息。
5750
5751### getLocalInterface<sup>9+</sup>
5752
5753getLocalInterface(descriptor: string): IRemoteBroker
5754
5755查询接口描述符的字符串。
5756
5757**系统能力**:SystemCapability.Communication.IPC.Core
5758
5759**参数:**
5760
5761  | 参数名     | 类型   | 必填 | 说明                 |
5762  | ---------- | ------ | ---- | -------------------- |
5763  | descriptor | string | 是   | 接口描述符的字符串。 |
5764
5765**返回值:**
5766
5767  | 类型          | 说明                                          |
5768  | ------------- | --------------------------------------------- |
5769  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
5770
5771### queryLocalInterface<sup>(deprecated)</sup>
5772
5773>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。
5774
5775queryLocalInterface(descriptor: string): IRemoteBroker
5776
5777查询接口描述符的字符串。
5778
5779**系统能力**:SystemCapability.Communication.IPC.Core
5780
5781**参数:**
5782
5783  | 参数名     | 类型   | 必填 | 说明                 |
5784  | ---------- | ------ | ---- | -------------------- |
5785  | descriptor | string | 是   | 接口描述符的字符串。 |
5786
5787**返回值:**
5788
5789  | 类型          | 说明                                          |
5790  | ------------- | --------------------------------------------- |
5791  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
5792
5793### sendRequest<sup>(deprecated)</sup>
5794
5795>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
5796
5797sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
5798
5799以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
5800
5801**系统能力**:SystemCapability.Communication.IPC.Core
5802
5803**参数:**
5804
5805  | 参数名  | 类型 | 必填 | 说明  |
5806  | ------- | ------------------------------- | ---- | ---- |
5807  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5808  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
5809  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
5810  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5811
5812**返回值:**
5813
5814  | 类型    | 说明                                          |
5815  | ------- | --------------------------------------------- |
5816  | boolean | true:发送成功,false:发送失败。|
5817
5818
5819### sendRequest<sup>8+(deprecated)</sup>
5820
5821>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
5822
5823sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise&lt;SendRequestResult&gt;
5824
5825以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
5826
5827**系统能力**:SystemCapability.Communication.IPC.Core
5828
5829**参数:**
5830
5831  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
5832  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
5833  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5834  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
5835  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
5836  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5837
5838**返回值:**
5839
5840  | 类型                             | 说明                                          |
5841  | -------------------------------- | --------------------------------------------- |
5842  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
5843
5844
5845### sendMessageRequest<sup>9+</sup>
5846
5847sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise&lt;RequestResult&gt;
5848
5849以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。
5850
5851**系统能力**:SystemCapability.Communication.IPC.Core
5852
5853**参数:**
5854
5855  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
5856  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
5857  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5858  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
5859  | reply   | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
5860  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5861
5862**返回值:**
5863
5864  | 类型                         | 说明                                      |
5865  | ---------------------------- | ----------------------------------------- |
5866  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是requestResult实例。 |
5867
5868
5869### sendMessageRequest<sup>9+</sup>
5870
5871sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void
5872
5873以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
5874
5875**系统能力**:SystemCapability.Communication.IPC.Core
5876
5877**参数:**
5878
5879  | 参数名   | 类型                               | 必填 | 说明                                                                                   |
5880  | -------- | ---------------------------------- | ---- | -------------------------------------------------------------------------------------- |
5881  | code     | number                             | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5882  | data     | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
5883  | reply    | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
5884  | options  | [MessageOption](#messageoption)    | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5885  | callback | AsyncCallback&lt;RequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |
5886
5887### sendRequest<sup>8+(deprecated)</sup>
5888
5889>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
5890
5891sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
5892
5893以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
5894
5895**系统能力**:SystemCapability.Communication.IPC.Core
5896
5897**参数:**
5898
5899  | 参数名   | 类型                                   | 必填 | 说明                                                                                   |
5900  | -------- | -------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
5901  | code     | number                                 | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5902  | data     | [MessageParcel](#messageparceldeprecated)        | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
5903  | reply    | [MessageParcel](#messageparceldeprecated)        | 是   | 接收应答数据的MessageParcel对象。                                                      |
5904  | options  | [MessageOption](#messageoption)        | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
5905  | callback | AsyncCallback&lt;SendRequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |
5906
5907### registerDeathRecipient<sup>9+</sup>
5908
5909registerDeathRecipient(recipient: DeathRecipient, flags: number): void
5910
5911注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
5912
5913**系统能力**:SystemCapability.Communication.IPC.Core
5914
5915**参数:**
5916
5917  | 参数名    | 类型                              | 必填 | 说明           |
5918  | --------- | --------------------------------- | ---- | -------------- |
5919  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
5920  | flags     | number                            | 是   | 死亡通知标志。 |
5921
5922**错误码:**
5923
5924以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
5925
5926  | 错误码ID | 错误信息 |
5927  | ------- | -------- |
5928  | 1900008 | proxy or remote object is invalid |
5929
5930### addDeathrecipient<sup>(deprecated)</sup>
5931
5932>从API version 9 开始不再维护,建议使用[registerDeathRecipient](#registerdeathrecipient9)类替代。
5933
5934addDeathRecipient(recipient: DeathRecipient, flags: number): boolean
5935
5936注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
5937
5938**系统能力**:SystemCapability.Communication.IPC.Core
5939
5940**参数:**
5941
5942  | 参数名    | 类型                              | 必填 | 说明           |
5943  | --------- | --------------------------------- | ---- | -------------- |
5944  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
5945  | flags     | number                            | 是   | 死亡通知标志。 |
5946
5947**返回值:**
5948
5949  | 类型    | 说明                                          |
5950  | ------- | --------------------------------------------- |
5951  | boolean | true:回调注册成功,false:回调注册失败。|
5952
5953
5954### unregisterDeathRecipient<sup>9+</sup>
5955
5956unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void
5957
5958注销用于接收远程对象死亡通知的回调。
5959
5960**系统能力**:SystemCapability.Communication.IPC.Core
5961
5962**参数:**
5963
5964  | 参数名    | 类型                              | 必填 | 说明           |
5965  | --------- | --------------------------------- | ---- | -------------- |
5966  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
5967  | flags     | number                            | 是   | 死亡通知标志。 |
5968
5969**错误码:**
5970
5971以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
5972
5973  | 错误码ID | 错误信息 |
5974  | ------- | -------- |
5975  | 1900008 | proxy or remote object is invalid |
5976
5977### removeDeathRecipient<sup>(deprecated)</sup>
5978
5979>从API version 9 开始不再维护,建议使用[unregisterDeathRecipient](#unregisterdeathrecipient9)类替代。
5980
5981removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean
5982
5983注销用于接收远程对象死亡通知的回调。
5984
5985**系统能力**:SystemCapability.Communication.IPC.Core
5986
5987**参数:**
5988
5989  | 参数名    | 类型                              | 必填 | 说明           |
5990  | --------- | --------------------------------- | ---- | -------------- |
5991  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
5992  | flags     | number                            | 是   | 死亡通知标志。 |
5993
5994**返回值:**
5995
5996  | 类型    | 说明                                          |
5997  | ------- | --------------------------------------------- |
5998  | boolean | true:回调注销成功,false:回调注销失败。|
5999
6000### getDescriptor<sup>9+</sup>
6001
6002getDescriptor(): string
6003
6004获取对象的接口描述符,接口描述符为字符串。
6005
6006**系统能力**:SystemCapability.Communication.IPC.Core
6007
6008**返回值:**
6009
6010  | 类型   | 说明             |
6011  | ------ | ---------------- |
6012  | string | 返回接口描述符。 |
6013
6014**错误码:**
6015
6016以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6017
6018  | 错误码ID | 错误信息 |
6019  | ------- | -------- |
6020  | 1900008 | proxy or remote object is invalid |
6021
6022
6023### getInterfaceDescriptor<sup>(deprecated)</sup>
6024
6025>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。
6026
6027getInterfaceDescriptor(): string
6028
6029获取对象的接口描述符,接口描述符为字符串。
6030
6031**系统能力**:SystemCapability.Communication.IPC.Core
6032
6033**返回值:**
6034
6035  | 类型   | 说明             |
6036  | ------ | ---------------- |
6037  | string | 返回接口描述符。 |
6038
6039
6040### isObjectDead
6041
6042isObjectDead(): boolean
6043
6044检查当前对象是否死亡。
6045
6046**系统能力**:SystemCapability.Communication.IPC.Core
6047
6048**返回值:**
6049
6050  | 类型    | 说明                                        |
6051  | ------- | ------------------------------------------- |
6052  | boolean | true:对象死亡,false:对象未死亡。|
6053
6054
6055## RemoteProxy
6056
6057实现IRemoteObject代理对象。
6058
6059**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core6060
6061| 名称                  | 值                      | 说明                              |
6062| --------------------- | ----------------------- | --------------------------------- |
6063| PING_TRANSACTION      | 1599098439 (0x5f504e47) | 内部指令码,用于测试IPC服务正常。 |
6064| DUMP_TRANSACTION      | 1598311760 (0x5f444d50) | 内部指令码,获取Binder内部状态。  |
6065| INTERFACE_TRANSACTION | 1598968902 (0x5f4e5446) | 内部指令码,获取对端接口描述符。  |
6066| MIN_TRANSACTION_ID    | 1 (0x00000001)          | 最小有效指令码。                  |
6067| MAX_TRANSACTION_ID    | 16777215 (0x00FFFFFF)   | 最大有效指令码。                  |
6068
6069### sendRequest<sup>(deprecated)</sup>
6070
6071>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
6072
6073sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
6074
6075以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
6076
6077**系统能力**:SystemCapability.Communication.IPC.Core
6078
6079**参数:**
6080
6081  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
6082  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
6083  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6084  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
6085  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
6086  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6087
6088**返回值:**
6089
6090  | 类型    | 说明                                          |
6091  | ------- | --------------------------------------------- |
6092  | boolean | true:发送成功,false:发送失败。|
6093
6094**示例:**
6095
6096  获取服务
6097
6098  ```ts
6099  import FA from "@ohos.ability.featureAbility";
6100  let proxy;
6101  let connect = {
6102      onConnect: function(elementName, remoteProxy) {
6103          console.log("RpcClient: js onConnect called.");
6104          proxy = remoteProxy;
6105      },
6106      onDisconnect: function(elementName) {
6107          console.log("RpcClient: onDisconnect");
6108      },
6109      onFailed: function() {
6110          console.log("RpcClient: onFailed");
6111      }
6112  };
6113  let want = {
6114      "bundleName": "com.ohos.server",
6115      "abilityName": "com.ohos.server.MainAbility",
6116  };
6117  FA.connectAbility(want, connect);
6118  ```
6119
6120  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息
6121
6122  ```ts
6123  let option = new rpc.MessageOption();
6124  let data = rpc.MessageParcel.create();
6125  let reply = rpc.MessageParcel.create();
6126  data.writeInt(1);
6127  data.writeString("hello");
6128  let ret: boolean = proxy.sendRequest(1, data, reply, option);
6129  if (ret) {
6130      console.log("sendRequest got result");
6131      let msg = reply.readString();
6132      console.log("RPCTest: reply msg: " + msg);
6133  } else {
6134      console.log("RPCTest: sendRequest failed");
6135  }
6136  console.log("RPCTest: sendRequest ends, reclaim parcel");
6137  data.reclaim();
6138  reply.reclaim();
6139  ```
6140
6141### sendMessageRequest<sup>9+</sup>
6142
6143sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise&lt;RequestResult&gt;
6144
6145以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。
6146
6147**系统能力**:SystemCapability.Communication.IPC.Core
6148
6149**参数:**
6150
6151  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
6152  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
6153  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6154  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
6155  | reply   | [MessageSequence](#messagesequence9)  | 是   | 接收应答数据的MessageSequence对象。                                                    |
6156  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6157
6158**返回值:**
6159
6160  | 类型                         | 说明                                      |
6161  | ---------------------------- | ----------------------------------------- |
6162  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是requestResult实例。 |
6163
6164**示例:**
6165
6166  获取服务
6167
6168  ```ts
6169  import FA from "@ohos.ability.featureAbility";
6170  let proxy;
6171  let connect = {
6172      onConnect: function(elementName, remoteProxy) {
6173          console.log("RpcClient: js onConnect called.");
6174          proxy = remoteProxy;
6175      },
6176      onDisconnect: function(elementName) {
6177          console.log("RpcClient: onDisconnect");
6178      },
6179      onFailed: function() {
6180          console.log("RpcClient: onFailed");
6181      }
6182  };
6183  let want = {
6184      "bundleName": "com.ohos.server",
6185      "abilityName": "com.ohos.server.MainAbility",
6186  };
6187  FA.connectAbility(want, connect);
6188  ```
6189
6190  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息
6191
6192  ```ts
6193  let option = new rpc.MessageOption();
6194  let data = rpc.MessageSequence.create();
6195  let reply = rpc.MessageSequence.create();
6196  data.writeInt(1);
6197  data.writeString("hello");
6198  proxy.sendMessageRequest(1, data, reply, option)
6199      .then(function(result) {
6200          if (result.errCode === 0) {
6201              console.log("sendMessageRequest got result");
6202              result.reply.readException();
6203              let msg = result.reply.readString();
6204              console.log("RPCTest: reply msg: " + msg);
6205          } else {
6206              console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
6207          }
6208      }).catch(function(e) {
6209          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
6210      }).finally (() => {
6211          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
6212          data.reclaim();
6213          reply.reclaim();
6214      });
6215  ```
6216
6217### sendRequest<sup>8+(deprecated)</sup>
6218
6219>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
6220
6221sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise&lt;SendRequestResult&gt;
6222
6223以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
6224
6225**系统能力**:SystemCapability.Communication.IPC.Core
6226
6227**参数:**
6228
6229  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
6230  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
6231  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6232  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
6233  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
6234  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6235
6236**返回值:**
6237
6238  | 类型                             | 说明                                          |
6239  | -------------------------------- | --------------------------------------------- |
6240  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
6241
6242**示例:**
6243
6244  获取服务
6245
6246  ```ts
6247  import FA from "@ohos.ability.featureAbility";
6248  let proxy;
6249  let connect = {
6250      onConnect: function(elementName, remoteProxy) {
6251          console.log("RpcClient: js onConnect called.");
6252          proxy = remoteProxy;
6253      },
6254      onDisconnect: function(elementName) {
6255          console.log("RpcClient: onDisconnect");
6256      },
6257      onFailed: function() {
6258          console.log("RpcClient: onFailed");
6259      }
6260  };
6261  let want = {
6262      "bundleName": "com.ohos.server",
6263      "abilityName": "com.ohos.server.MainAbility",
6264  };
6265  FA.connectAbility(want, connect);
6266  ```
6267
6268  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息
6269
6270  ```ts
6271  let option = new rpc.MessageOption();
6272  let data = rpc.MessageParcel.create();
6273  let reply = rpc.MessageParcel.create();
6274  data.writeInt(1);
6275  data.writeString("hello");
6276  proxy.sendRequest(1, data, reply, option)
6277      .then(function(result) {
6278          if (result.errCode === 0) {
6279              console.log("sendRequest got result");
6280              result.reply.readException();
6281              let msg = result.reply.readString();
6282              console.log("RPCTest: reply msg: " + msg);
6283          } else {
6284              console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
6285          }
6286      }).catch(function(e) {
6287          console.log("RPCTest: sendRequest got exception: " + e.message);
6288      }).finally (() => {
6289          console.log("RPCTest: sendRequest ends, reclaim parcel");
6290          data.reclaim();
6291          reply.reclaim();
6292      });
6293  ```
6294
6295### sendMessageRequest<sup>9+</sup>
6296
6297sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void
6298
6299以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendMessageRequest返回后的某个时机执行回调,回复内容在RequestResult的reply报文里。
6300
6301**系统能力**:SystemCapability.Communication.IPC.Core
6302
6303**参数:**
6304
6305  | 参数名   | 类型                               | 必填 | 说明                                                                                   |
6306  | -------- | ---------------------------------- | ---- | -------------------------------------------------------------------------------------- |
6307  | code     | number                             | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6308  | data     | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
6309  | reply    | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
6310  | options  | [MessageOption](#messageoption)    | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6311  | callback | AsyncCallback&lt;RequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |
6312
6313**示例:**
6314
6315  获取服务
6316
6317  ```ts
6318  import FA from "@ohos.ability.featureAbility";
6319  let proxy;
6320  let connect = {
6321      onConnect: function(elementName, remoteProxy) {
6322          console.log("RpcClient: js onConnect called.");
6323          proxy = remoteProxy;
6324      },
6325      onDisconnect: function(elementName) {
6326          console.log("RpcClient: onDisconnect");
6327      },
6328      onFailed: function() {
6329          console.log("RpcClient: onFailed");
6330      }
6331  };
6332  let want = {
6333      "bundleName": "com.ohos.server",
6334      "abilityName": "com.ohos.server.MainAbility",
6335  };
6336  function sendRequestCallback(result) {
6337      if (result.errCode === 0) {
6338          console.log("sendRequest got result");
6339          result.reply.readException();
6340          let msg = result.reply.readString();
6341          console.log("RPCTest: reply msg: " + msg);
6342      } else {
6343          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
6344      }
6345      console.log("RPCTest: sendRequest ends, reclaim parcel");
6346      result.data.reclaim();
6347      result.reply.reclaim();
6348  }
6349  FA.connectAbility(want, connect);
6350  ```
6351
6352  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息
6353
6354  ```ts
6355  let option = new rpc.MessageOption();
6356  let data = rpc.MessageSequence.create();
6357  let reply = rpc.MessageSequence.create();
6358  data.writeInt(1);
6359  data.writeString("hello");
6360  try {
6361      proxy.sendRequest(1, data, reply, option, sendRequestCallback);
6362  } catch(error) {
6363      console.info("rpc send sequence request fail, errorCode " + error.code);
6364      console.info("rpc send sequence request fail, errorMessage " + error.message);
6365  }
6366  ```
6367
6368### sendRequest<sup>8+(deprecated)</sup>
6369
6370>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
6371
6372sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
6373
6374以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
6375
6376**系统能力**:SystemCapability.Communication.IPC.Core
6377
6378**参数:**
6379
6380  | 参数名   | 类型                                   | 必填 | 说明                                                                                   |
6381  | -------- | -------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
6382  | code     | number                                 | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6383  | data     | [MessageParcel](#messageparceldeprecated)        | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
6384  | reply    | [MessageParcel](#messageparceldeprecated)        | 是   | 接收应答数据的MessageParcel对象。                                                      |
6385  | options  | [MessageOption](#messageoption)        | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
6386  | callback | AsyncCallback&lt;SendRequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |
6387
6388**示例:**
6389
6390  获取服务
6391
6392  ```ts
6393  import FA from "@ohos.ability.featureAbility";
6394  let proxy;
6395  let connect = {
6396      onConnect: function(elementName, remoteProxy) {
6397          console.log("RpcClient: js onConnect called.");
6398          proxy = remoteProxy;
6399      },
6400      onDisconnect: function(elementName) {
6401          console.log("RpcClient: onDisconnect");
6402      },
6403      onFailed: function() {
6404          console.log("RpcClient: onFailed");
6405      }
6406  };
6407  let want = {
6408      "bundleName": "com.ohos.server",
6409      "abilityName": "com.ohos.server.MainAbility",
6410  };
6411  function sendRequestCallback(result) {
6412      if (result.errCode === 0) {
6413          console.log("sendRequest got result");
6414          result.reply.readException();
6415          let msg = result.reply.readString();
6416          console.log("RPCTest: reply msg: " + msg);
6417      } else {
6418          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
6419      }
6420      console.log("RPCTest: sendRequest ends, reclaim parcel");
6421      result.data.reclaim();
6422      result.reply.reclaim();
6423  }
6424  FA.connectAbility(want, connect);
6425  ```
6426
6427  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息
6428
6429  ```ts
6430  let option = new rpc.MessageOption();
6431  let data = rpc.MessageParcel.create();
6432  let reply = rpc.MessageParcel.create();
6433  data.writeInt(1);
6434  data.writeString("hello");
6435  proxy.sendRequest(1, data, reply, option, sendRequestCallback);
6436  ```
6437
6438### getLocalInterface<sup>9+</sup>
6439
6440getLocalInterface(interface: string): IRemoteBroker
6441
6442查询并获取当前接口描述符对应的本地接口对象。
6443
6444**系统能力**:SystemCapability.Communication.IPC.Core
6445
6446**参数:**
6447
6448  | 参数名    | 类型   | 必填 | 说明                   |
6449  | --------- | ------ | ---- | ---------------------- |
6450  | interface | string | 是   | 需要查询的接口描述符。 |
6451
6452**返回值:**
6453
6454  | 类型          | 说明                                       |
6455  | ------------- | ------------------------------------------ |
6456  | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 |
6457
6458**错误码:**
6459
6460以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6461
6462  | 错误码ID | 错误信息 |
6463  | ------- | --------  |
6464  | 1900006 | only remote object permitted |
6465
6466**示例:**
6467
6468  获取服务
6469
6470  ```ts
6471  import FA from "@ohos.ability.featureAbility";
6472  let proxy;
6473  let connect = {
6474      onConnect: function(elementName, remoteProxy) {
6475          console.log("RpcClient: js onConnect called.");
6476          proxy = remoteProxy;
6477      },
6478      onDisconnect: function (elementName) {
6479          console.log("RpcClient: onDisconnect");
6480      },
6481      onFailed: function() {
6482          console.log("RpcClient: onFailed");
6483      }
6484  };
6485  let want = {
6486      "bundleName":"com.ohos.server",
6487      "abilityName":"com.ohos.server.MainAbility",
6488  };
6489  FA.connectAbility(want, connect);
6490  ```
6491
6492  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的getLocalInterface接口方法查询接口对象
6493
6494  ```ts
6495  try {
6496      let broker = proxy.getLocalInterface("testObject");
6497      console.log("RpcClient: getLocalInterface is " + broker);
6498  } catch(error) {
6499      console.info("rpc get local interface fail, errorCode " + error.code);
6500      console.info("rpc get local interface fail, errorMessage " + error.message);
6501  }
6502  ```
6503
6504### queryLocalInterface<sup>(deprecated)</sup>
6505
6506>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。
6507
6508queryLocalInterface(interface: string): IRemoteBroker
6509
6510查询并获取当前接口描述符对应的本地接口对象。
6511
6512**系统能力**:SystemCapability.Communication.IPC.Core
6513
6514**参数:**
6515
6516  | 参数名    | 类型   | 必填 | 说明                   |
6517  | --------- | ------ | ---- | ---------------------- |
6518  | interface | string | 是   | 需要查询的接口描述符。 |
6519
6520**返回值:**
6521
6522  | 类型          | 说明                                       |
6523  | ------------- | ------------------------------------------ |
6524  | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 |
6525
6526**示例:**
6527
6528  获取服务
6529
6530  ```ts
6531  import FA from "@ohos.ability.featureAbility";
6532  let proxy;
6533  let connect = {
6534      onConnect: function(elementName, remoteProxy) {
6535          console.log("RpcClient: js onConnect called.");
6536          proxy = remoteProxy;
6537      },
6538      onDisconnect: function (elementName) {
6539          console.log("RpcClient: onDisconnect");
6540      },
6541      onFailed: function() {
6542          console.log("RpcClient: onFailed");
6543      }
6544  };
6545  let want = {
6546      "bundleName":"com.ohos.server",
6547      "abilityName":"com.ohos.server.MainAbility",
6548  };
6549  FA.connectAbility(want, connect);
6550  ```
6551
6552  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的queryLocalInterface接口获取接口对象
6553
6554  ```ts
6555  let broker = proxy.queryLocalInterface("testObject");
6556  console.log("RpcClient: queryLocalInterface is " + broker);
6557  ```
6558
6559### registerDeathRecipient<sup>9+</sup>
6560
6561registerDeathRecipient(recipient: DeathRecipient, flags: number): void
6562
6563注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
6564
6565**系统能力**:SystemCapability.Communication.IPC.Core
6566
6567**参数:**
6568
6569  | 参数名    | 类型                              | 必填 | 说明           |
6570  | --------- | --------------------------------- | ---- | -------------- |
6571  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
6572  | flags     | number                            | 是   | 死亡通知标志。 |
6573
6574**错误码:**
6575
6576以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6577
6578  | 错误码ID | 错误信息 |
6579  | ------- | -------- |
6580  | 1900008 | proxy or remote object is invalid |
6581
6582**示例:**
6583
6584  获取服务
6585
6586  ```ts
6587  import FA from "@ohos.ability.featureAbility";
6588  let proxy;
6589  let connect = {
6590      onConnect: function(elementName, remoteProxy) {
6591          console.log("RpcClient: js onConnect called.");
6592          proxy = remoteProxy;
6593      },
6594      onDisconnect: function(elementName) {
6595          console.log("RpcClient: onDisconnect");
6596      },
6597      onFailed: function() {
6598          console.log("RpcClient: onFailed");
6599      }
6600  };
6601  let want = {
6602      "bundleName": "com.ohos.server",
6603      "abilityName": "com.ohos.server.MainAbility",
6604  };
6605  FA.connectAbility(want, connect);
6606  ```
6607
6608  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的registerDeathRecipient接口注册死亡回调
6609
6610  ```ts
6611  class MyDeathRecipient {
6612      onRemoteDied() {
6613          console.log("server died");
6614      }
6615  }
6616  let deathRecipient = new MyDeathRecipient();
6617  try {
6618      proxy.registerDeathRecipient(deathRecipient, 0);
6619  } catch(error) {
6620      console.info("proxy register deathRecipient fail, errorCode " + error.code);
6621      console.info("proxy register deathRecipient fail, errorMessage " + error.message);
6622  }
6623  ```
6624
6625### addDeathRecippient<sup>(deprecated)</sup>
6626
6627>从API version 9 开始不再维护,建议使用[registerDeathRecipient](#registerdeathrecipient9)类替代。
6628
6629addDeathRecipient(recipient: DeathRecipient, flags: number): boolean
6630
6631注册用于接收远程对象死亡通知的回调,增加proxy对象上的死亡通知。
6632
6633**系统能力**:SystemCapability.Communication.IPC.Core
6634
6635**参数:**
6636
6637  | 参数名    | 类型                              | 必填 | 说明                              |
6638  | --------- | --------------------------------- | ---- | --------------------------------- |
6639  | recipient | [DeathRecipient](#deathrecipient) | 是   | 收件人表示要注册的回调。          |
6640  | flags     | number                            | 是   | 死亡通知标志。保留参数。设置为0。 |
6641
6642**返回值:**
6643
6644  | 类型    | 说明                                          |
6645  | ------- | --------------------------------------------- |
6646  | boolean | true:回调注册成功,false:回调注册失败。|
6647
6648**示例:**
6649
6650  获取服务
6651
6652  ```ts
6653  import FA from "@ohos.ability.featureAbility";
6654  let proxy;
6655  let connect = {
6656      onConnect: function(elementName, remoteProxy) {
6657          console.log("RpcClient: js onConnect called.");
6658          proxy = remoteProxy;
6659      },
6660      onDisconnect: function(elementName) {
6661          console.log("RpcClient: onDisconnect");
6662      },
6663      onFailed: function() {
6664          console.log("RpcClient: onFailed");
6665      }
6666  };
6667  let want = {
6668      "bundleName": "com.ohos.server",
6669      "abilityName": "com.ohos.server.MainAbility",
6670  };
6671  FA.connectAbility(want, connect);
6672  ```
6673
6674  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的addDeathRecippient接口方法新增死亡回调
6675
6676  ```ts
6677  class MyDeathRecipient {
6678      onRemoteDied() {
6679          console.log("server died");
6680      }
6681  }
6682  let deathRecipient = new MyDeathRecipient();
6683  proxy.addDeathRecipient(deathRecipient, 0);
6684  ```
6685
6686### unregisterDeathRecipient<sup>9+</sup>
6687
6688unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void
6689
6690注销用于接收远程对象死亡通知的回调。
6691
6692**系统能力**:SystemCapability.Communication.IPC.Core
6693
6694**参数:**
6695
6696  | 参数名    | 类型                              | 必填 | 说明           |
6697  | --------- | --------------------------------- | ---- | -------------- |
6698  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
6699  | flags     | number                            | 是   | 死亡通知标志。 |
6700
6701**错误码:**
6702
6703以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6704
6705  | 错误码ID | 错误信息 |
6706  | ------- | -------- |
6707  | 1900008 | proxy or remote object is invalid |
6708
6709**示例:**
6710
6711  获取服务
6712
6713  ```ts
6714  import FA from "@ohos.ability.featureAbility";
6715  let proxy;
6716  let connect = {
6717      onConnect: function(elementName, remoteProxy) {
6718          console.log("RpcClient: js onConnect called.");
6719          proxy = remoteProxy;
6720      },
6721      onDisconnect: function(elementName) {
6722          console.log("RpcClient: onDisconnect");
6723      },
6724      onFailed: function() {
6725          console.log("RpcClient: onFailed");
6726      }
6727  };
6728  let want = {
6729      "bundleName": "com.ohos.server",
6730      "abilityName": "com.ohos.server.MainAbility",
6731  };
6732  FA.connectAbility(want, connect);
6733  ```
6734
6735  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的unregisterDeathRecipient接口方法注销死亡回调
6736
6737  ```ts
6738  class MyDeathRecipient {
6739      onRemoteDied() {
6740          console.log("server died");
6741      }
6742  }
6743  let deathRecipient = new MyDeathRecipient();
6744  try {
6745      proxy.registerDeathRecippient(deathRecipient, 0);
6746      proxy.unregisterDeathRecippient(deathRecipient, 0);
6747  } catch(error) {
6748      console.info("proxy register deathRecipient fail, errorCode " + error.code);
6749      console.info("proxy register deathRecipient fail, errorMessage " + error.message);
6750  }
6751  ```
6752
6753### removeDeathRecipient<sup>(deprecated)</sup>
6754
6755>从API version 9 开始不再维护,建议使用[unregisterDeathRecipient](#unregisterdeathrecipient9)类替代。
6756
6757removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean
6758
6759注销用于接收远程对象死亡通知的回调。
6760
6761**系统能力**:SystemCapability.Communication.IPC.Core
6762
6763**参数:**
6764
6765  | 参数名    | 类型                              | 必填 | 说明                              |
6766  | --------- | --------------------------------- | ---- | --------------------------------- |
6767  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的死亡回调。                |
6768  | flags     | number                            | 是   | 死亡通知标志。保留参数。设置为0。 |
6769
6770**返回值:**
6771
6772  | 类型    | 说明                                          |
6773  | ------- | --------------------------------------------- |
6774  | boolean | true:回调注销成功,false:回调注销失败。|
6775
6776**示例:**
6777
6778  获取服务
6779
6780  ```ts
6781  import FA from "@ohos.ability.featureAbility";
6782  let proxy;
6783  let connect = {
6784      onConnect: function(elementName, remoteProxy) {
6785          console.log("RpcClient: js onConnect called.");
6786          proxy = remoteProxy;
6787      },
6788      onDisconnect: function(elementName) {
6789          console.log("RpcClient: onDisconnect");
6790      },
6791      onFailed: function() {
6792          console.log("RpcClient: onFailed");
6793      }
6794  };
6795  let want = {
6796      "bundleName": "com.ohos.server",
6797      "abilityName": "com.ohos.server.MainAbility",
6798  };
6799  FA.connectAbility(want, connect);
6800  ```
6801
6802  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的removeDeathRecipient接口方法去注册死亡回调
6803
6804  ```ts
6805  class MyDeathRecipient {
6806      onRemoteDied() {
6807          console.log("server died");
6808      }
6809  }
6810  let deathRecipient = new MyDeathRecipient();
6811  proxy.addDeathRecippient(deathRecipient, 0);
6812  proxy.removeDeathRecipient(deathRecipient, 0);
6813  ```
6814
6815### getDescriptor<sup>9+</sup>
6816
6817getDescriptor(): string
6818
6819获取对象的接口描述符,接口描述符为字符串。
6820
6821**系统能力**:SystemCapability.Communication.IPC.Core
6822
6823**返回值:**
6824
6825  | 类型   | 说明             |
6826  | ------ | ---------------- |
6827  | string | 返回接口描述符。 |
6828
6829**错误码:**
6830
6831以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
6832
6833  | 错误码ID | 错误信息 |
6834  | -------- | ------- |
6835  | 1900008 | proxy or remote object is invalid |
6836  | 1900007 | communication failed              |
6837
6838**示例:**
6839
6840  获取服务
6841
6842  ```ts
6843  import FA from "@ohos.ability.featureAbility";
6844  let proxy;
6845  let connect = {
6846      onConnect: function(elementName, remoteProxy) {
6847          console.log("RpcClient: js onConnect called.");
6848          proxy = remoteProxy;
6849      },
6850      onDisconnect: function(elementName) {
6851          console.log("RpcClient: onDisconnect");
6852      },
6853      onFailed: function() {
6854          console.log("RpcClient: onFailed");
6855      }
6856  };
6857  let want = {
6858      "bundleName": "com.ohos.server",
6859      "abilityName": "com.ohos.server.MainAbility",
6860  };
6861  FA.connectAbility(want, connect);
6862  ```
6863  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的getDescriptor接口方法获取对象的接口描述符
6864
6865  ```ts
6866  try {
6867      let descriptor = proxy.getDescriptor();
6868      console.log("RpcClient: descriptor is " + descriptor);
6869  } catch(error) {
6870      console.info("rpc get interface descriptor fail, errorCode " + error.code);
6871      console.info("rpc get interface descriptor fail, errorMessage " + error.message);
6872  }
6873  ```
6874
6875### getInterfaceDescriptor<sup>(deprecated)</sup>
6876
6877>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。
6878
6879getInterfaceDescriptor(): string
6880
6881查询当前代理对象接口的描述符。
6882
6883**系统能力**:SystemCapability.Communication.IPC.Core
6884
6885**返回值:**
6886
6887  | 类型   | 说明               |
6888  | ------ | ------------------ |
6889  | string | 当前的接口描述符。 |
6890
6891**示例:**
6892
6893  获取服务
6894
6895  ```ts
6896  import FA from "@ohos.ability.featureAbility";
6897  let proxy;
6898  let connect = {
6899      onConnect: function(elementName, remoteProxy) {
6900          console.log("RpcClient: js onConnect called.");
6901          proxy = remoteProxy;
6902      },
6903      onDisconnect: function(elementName) {
6904          console.log("RpcClient: onDisconnect");
6905      },
6906      onFailed: function() {
6907          console.log("RpcClient: onFailed");
6908      }
6909  };
6910  let want = {
6911      "bundleName": "com.ohos.server",
6912      "abilityName": "com.ohos.server.MainAbility",
6913  };
6914  FA.connectAbility(want, connect);
6915    ```
6916
6917  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的isObjectDead接口方法判断当前对象是否已经死亡
6918
6919  ```ts
6920  let descriptor = proxy.getInterfaceDescriptor();
6921  console.log("RpcClient: descriptor is " + descriptor);
6922  ```
6923
6924### isObjectDead
6925
6926isObjectDead(): boolean
6927
6928指示对应的RemoteObject是否死亡。
6929
6930**系统能力**:SystemCapability.Communication.IPC.Core
6931
6932**返回值:**
6933
6934  | 类型    | 说明                                                      |
6935  | ------- | --------------------------------------------------------- |
6936  | boolean | true:对应的对象已经死亡,false:对应的对象未死亡|
6937
6938**示例:**
6939
6940  获取服务
6941
6942  ```ts
6943  import FA from "@ohos.ability.featureAbility";
6944  let proxy;
6945  let connect = {
6946      onConnect: function(elementName, remoteProxy) {
6947          console.log("RpcClient: js onConnect called.");
6948          proxy = remoteProxy;
6949      },
6950      onDisconnect: function(elementName) {
6951          console.log("RpcClient: onDisconnect");
6952      },
6953      onFailed: function() {
6954          console.log("RpcClient: onFailed");
6955      }
6956  };
6957  let want = {
6958      "bundleName": "com.ohos.server",
6959      "abilityName": "com.ohos.server.MainAbility",
6960  };
6961  FA.connectAbility(want, connect);
6962  ```
6963
6964  上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的isObjectDead接口方法判断当前对象是否已经死亡
6965
6966  ```ts
6967  let isDead = proxy.isObjectDead();
6968  console.log("RpcClient: isObjectDead is " + isDead);
6969  ```
6970
6971## MessageOption
6972
6973公共消息选项(int标志,int等待时间),使用标志中指定的标志构造指定的MessageOption对象。
6974
6975**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core6976
6977  | 名称          | 值   | 说明                                                        |
6978  | ------------- | ---- | ----------------------------------------------------------- |
6979  | TF_SYNC       | 0    | 同步调用标识。                                                  |
6980  | TF_ASYNC      | 1    | 异步调用标识。                                                  |
6981  | TF_ACCEPT_FDS | 0x10 | 指示sendMessageRequest<sup>9+</sup>接口可以返回文件描述符。 |
6982  | TF_WAIT_TIME  | 8    | 默认等待时间(单位/秒)。                                          |
6983
6984
6985### constructor<sup>9+</sup>
6986
6987constructor(async?: boolean);
6988
6989MessageOption构造函数。
6990
6991**系统能力**:SystemCapability.Communication.IPC.Core
6992
6993**参数:**
6994
6995  | 参数名    | 类型   | 必填 | 说明                                   |
6996  | --------- | ------ | ---- | -------------------------------------- |
6997  | syncFlags | number | 否   | 同步调用或异步调用标志。默认同步调用。 |
6998
6999
7000**示例:**
7001
7002  ```ts
7003  class TestRemoteObject extends rpc.MessageOption {
7004    constructor(async) {
7005        super(async);
7006    }
7007  }
7008  ```
7009
7010### constructor
7011
7012constructor(syncFlags?: number, waitTime?: number)
7013
7014MessageOption构造函数。
7015
7016**系统能力**:SystemCapability.Communication.IPC.Core
7017
7018**参数:**
7019
7020  | 参数名    | 类型   | 必填 | 说明                                          |
7021  | --------- | ------ | ---- | --------------------------------------------- |
7022  | syncFlags | number | 否   | 同步调用或异步调用标志。默认同步调用。        |
7023  | waitTime  | number | 否   | 调用rpc最长等待时间。默认&nbsp;TF_WAIT_TIME。 |
7024
7025**示例:**
7026
7027  ```ts
7028  class TestRemoteObject extends rpc.MessageOption {
7029    constructor(syncFlags,waitTime) {
7030        super(syncFlags,waitTime);
7031    }
7032  }
7033  ```
7034### isAsync<sup>9+</sup>
7035
7036isAsync(): boolean;
7037
7038获取SendMessageRequest调用中确定同步或是异步的标志。
7039
7040**系统能力**:SystemCapability.Communication.IPC.Core
7041
7042**返回值:**
7043
7044  | 类型    | 说明                                 |
7045  | ------- | ------------------------------------ |
7046  | boolean | true:同步调用成功,false:异步调用成功。 |
7047
7048**示例:**
7049
7050  ```ts
7051  let option = new rpc.MessageOption();
7052  let isAsync = option.isAsync();
7053  ```
7054
7055### setAsync<sup>9+</sup>
7056
7057setAsync(async: boolean): void;
7058
7059设置SendMessageRequest调用中确定同步或是异步的标志。
7060
7061**系统能力**:SystemCapability.Communication.IPC.Core
7062
7063**示例:**
7064
7065  ```ts
7066  let option = new rpc.MessageOption();
7067  let setAsync = option.setAsync(true);
7068  console.log("Set synchronization flag");
7069  ```
7070
7071### getFlags
7072
7073getFlags(): number
7074
7075获取同步调用或异步调用标志。
7076
7077**系统能力**:SystemCapability.Communication.IPC.Core
7078
7079**返回值:**
7080
7081  | 类型   | 说明                                 |
7082  | ------ | ------------------------------------ |
7083  | number | 调用成功返回同步调用或异步调用标志。 |
7084
7085**示例:**
7086
7087  ```ts
7088  try {
7089      let option = new rpc.MessageOption();
7090      console.info("create object successfully.");
7091      let flog = option.getFlags();
7092      console.info("run getFlags success, flog is " + flog);
7093      option.setFlags(1)
7094      console.info("run setFlags success");
7095      let flog2 = option.getFlags();
7096      console.info("run getFlags success, flog2 is " + flog2);
7097  } catch (error) {
7098      console.info("error " + error);
7099  }
7100  ```
7101
7102### setFlags
7103
7104setFlags(flags: number): void
7105
7106设置同步调用或异步调用标志。
7107
7108**系统能力**:SystemCapability.Communication.IPC.Core
7109
7110**参数:**
7111
7112  | 参数名 | 类型   | 必填 | 说明                     |
7113  | ------ | ------ | ---- | ------------------------ |
7114  | flags  | number | 是   | 同步调用或异步调用标志。 |
7115
7116**示例:**
7117
7118  ```ts
7119  try {
7120      let option = new rpc.MessageOption();
7121      option.setFlags(1)
7122      console.info("run setFlags success");
7123      let flog = option.getFlags();
7124      console.info("run getFlags success, flog is " + flog);
7125  } catch (error) {
7126      console.info("error " + error);
7127  }
7128  ```
7129
7130### getWaitTime
7131
7132getWaitTime(): number
7133
7134获取rpc调用的最长等待时间。
7135
7136**系统能力**:SystemCapability.Communication.IPC.Core
7137
7138**返回值:**
7139
7140  | 类型   | 说明              |
7141  | ------ | ----------------- |
7142  | number | rpc最长等待时间。 |
7143
7144**示例:**
7145
7146  ```ts
7147  try {
7148      let option = new rpc.MessageOption();
7149      let time = option.getWaitTime();
7150      console.info("run getWaitTime success");
7151      option.setWaitTime(16);
7152      let time2 = option.getWaitTime();
7153      console.info("run getWaitTime success, time is " + time);
7154  } catch (error) {
7155      console.info("error " + error);
7156  }
7157  ```
7158
7159### setWaitTime
7160
7161setWaitTime(waitTime: number): void
7162
7163设置rpc调用最长等待时间。
7164
7165**系统能力**:SystemCapability.Communication.IPC.Core
7166
7167**参数:**
7168
7169  | 参数名   | 类型   | 必填 | 说明                  |
7170  | -------- | ------ | ---- | --------------------- |
7171  | waitTime | number | 是   | rpc调用最长等待时间。 |
7172
7173**示例:**
7174
7175  ```ts
7176  try {
7177      let option = new rpc.MessageOption();
7178      option.setWaitTime(16);
7179      let time = option.getWaitTime();
7180      console.info("run getWaitTime success, time is " + time);
7181  } catch (error) {
7182      console.info("error " + error);
7183  }
7184  ```
7185
7186## IPCSkeleton
7187
7188用于获取IPC上下文信息,包括获取UID和PID、获取本端和对端设备ID、检查接口调用是否在同一设备上。
7189
7190### getContextObject
7191
7192static getContextObject(): IRemoteObject
7193
7194静态方法,获取系统能力的管理者。
7195
7196**系统能力**:SystemCapability.Communication.IPC.Core
7197
7198**返回值:**
7199
7200  | 类型                            | 说明                 |
7201  | ------------------------------- | -------------------- |
7202  | [IRemoteObject](#iremoteobject) | 返回系统能力管理者。 |
7203
7204**示例:**
7205
7206  ```ts
7207  let samgr = rpc.IPCSkeleton.getContextObject();
7208  console.log("RpcServer: getContextObject result: " + samgr);
7209  ```
7210
7211### getCallingPid
7212
7213static getCallingPid(): number
7214
7215静态方法,获取调用者的PID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的PID。
7216
7217**系统能力**:SystemCapability.Communication.IPC.Core
7218
7219**返回值:**
7220
7221  | 类型   | 说明              |
7222  | ------ | ----------------- |
7223  | number | 返回调用者的PID。 |
7224
7225**示例:**
7226
7227  ```ts
7228  class Stub extends rpc.RemoteObject {
7229      onRemoteMessageRequest(code, data, reply, option) {
7230          let callerPid = rpc.IPCSkeleton.getCallingPid();
7231          console.log("RpcServer: getCallingPid result: " + callerPid);
7232          return true;
7233      }
7234 }
7235  ```
7236
7237### getCallingUid
7238
7239static getCallingUid(): number
7240
7241静态方法,获取调用者的UID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的UID。
7242
7243**系统能力**:SystemCapability.Communication.IPC.Core
7244
7245**返回值:**
7246
7247  | 类型   | 说明              |
7248  | ------ | ----------------- |
7249  | number | 返回调用者的UID。 |
7250
7251**示例:**
7252
7253  ```ts
7254  class Stub extends rpc.RemoteObject {
7255      onRemoteMessageRequest(code, data, reply, option) {
7256          let callerUid = rpc.IPCSkeleton.getCallingUid();
7257          console.log("RpcServer: getCallingUid result: " + callerUid);
7258          return true;
7259      }
7260  }
7261  ```
7262
7263### getCallingTokenId<sup>8+</sup>
7264
7265static getCallingTokenId(): number;
7266
7267静态方法,获取调用者的TokenId,用于被调用方对调用方的身份校验。
7268
7269**系统能力**:SystemCapability.Communication.IPC.Core
7270
7271**返回值:**
7272
7273   | 类型   | 说明                  |
7274   | ------ | --------------------- |
7275   | number | 返回调用者的TokenId。 |
7276
7277**示例:**
7278
7279  ```ts
7280  class Stub extends rpc.RemoteObject {
7281      onRemoteMessageRequest(code, data, reply, option) {
7282          let callerTokenId = rpc.IPCSkeleton.getCallingTokenId();
7283          console.log("RpcServer: getCallingTokenId result: " + callerTokenId);
7284          return true;
7285      }
7286  }
7287  ```
7288
7289
7290### getCallingDeviceID
7291
7292static getCallingDeviceID(): string
7293
7294静态方法,获取调用者进程所在的设备ID。
7295
7296**系统能力**:SystemCapability.Communication.IPC.Core
7297
7298**返回值:**
7299
7300  | 类型   | 说明                         |
7301  | ------ | ---------------------------- |
7302  | string | 返回调用者进程所在的设备ID。 |
7303
7304**示例:**
7305
7306  ```ts
7307  class Stub extends rpc.RemoteObject {
7308      onRemoteMessageRequest(code, data, reply, option) {
7309          let callerDeviceID = rpc.IPCSkeleton.getCallingDeviceID();
7310          console.log("RpcServer: callerDeviceID is: " + callerDeviceID);
7311          return true;
7312      }
7313  }
7314  ```
7315
7316### getLocalDeviceID
7317
7318static getLocalDeviceID(): string
7319
7320静态方法,获取本端设备ID。
7321
7322**系统能力**:SystemCapability.Communication.IPC.Core
7323
7324**返回值:**
7325
7326  | 类型   | 说明               |
7327  | ------ | ------------------ |
7328  | string | 返回本地设备的ID。 |
7329
7330**示例:**
7331
7332  ```ts
7333  class Stub extends rpc.RemoteObject {
7334      onRemoteMessageRequest(code, data, reply, option) {
7335          let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID();
7336          console.log("RpcServer: localDeviceID is: " + localDeviceID);
7337          return true;
7338      }
7339  }
7340  ```
7341
7342### isLocalCalling
7343
7344static isLocalCalling(): boolean
7345
7346静态方法,检查当前通信对端是否是本设备的进程。
7347
7348**系统能力**:SystemCapability.Communication.IPC.Core
7349
7350**返回值:**
7351
7352  | 类型    | 说明                                                      |
7353  | ------- | --------------------------------------------------------- |
7354  | boolean | true:调用在同一台设备,false:调用未在同一台设备。|
7355
7356**示例:**
7357
7358  ```ts
7359  class Stub extends rpc.RemoteObject {
7360      onRemoteMessageRequest(code, data, reply, option) {
7361          let isLocalCalling = rpc.IPCSkeleton.isLocalCalling();
7362          console.log("RpcServer: isLocalCalling is: " + isLocalCalling);
7363          return true;
7364      }
7365  }
7366  ```
7367
7368### flushCmdBuffer<sup>9+</sup>
7369
7370static flushCmdBuffer(object: IRemoteObject): void
7371
7372静态方法,将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。
7373
7374**系统能力**:SystemCapability.Communication.IPC.Core
7375
7376**参数:**
7377
7378  | 参数名 | 类型                            | 必填 | 说明                |
7379  | ------ | ------------------------------- | ---- | ------------------- |
7380  | object | [IRemoteObject](#iremoteobject) | 是   | 指定的RemoteProxy。 |
7381
7382
7383**示例:**
7384
7385  ```ts
7386  class TestRemoteObject extends rpc.RemoteObject {
7387      constructor(descriptor) {
7388          super(descriptor);
7389      }
7390  }
7391  let remoteObject = new TestRemoteObject("aaa");
7392  try {
7393      rpc.IPCSkeleton.flushCmdBuffer(remoteObject);
7394  } catch(error) {
7395      console.info("proxy set calling identity fail, errorCode " + error.code);
7396      console.info("proxy set calling identity fail, errorMessage " + error.message);
7397  }
7398  ```
7399
7400### flushCommands<sup>(deprecated)</sup>
7401
7402>从API version 9 开始不再维护,建议使用[flushCmdBuffer](#flushcmdbuffer9)类替代。
7403
7404static flushCommands(object: IRemoteObject): number
7405
7406静态方法,将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。
7407
7408**系统能力**:SystemCapability.Communication.IPC.Core
7409
7410**参数:**
7411
7412  | 参数名 | 类型                            | 必填 | 说明                |
7413  | ------ | ------------------------------- | ---- | ------------------- |
7414  | object | [IRemoteObject](#iremoteobject) | 是   | 指定的RemoteProxy。 |
7415
7416**返回值:**
7417
7418  | 类型   | 说明                                                                              |
7419  | ------ | --------------------------------------------------------------------------------- |
7420  | number | 如果操作成功,返回0;如果输入对象为空或RemoteObject,或者操作失败,返回错误代码。 |
7421
7422**示例:**
7423
7424  ```ts
7425  class MyDeathRecipient {
7426      onRemoteDied() {
7427          console.log("server died");
7428      }
7429  }
7430  class TestRemoteObject extends rpc.RemoteObject {
7431      constructor(descriptor) {
7432          super(descriptor);
7433      }
7434      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7435          return true;
7436      }
7437      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7438          return true;
7439      }
7440      isObjectDead(): boolean {
7441          return false;
7442      }
7443  }
7444  let remoteObject = new TestRemoteObject("aaa");
7445  let ret = rpc.IPCSkeleton.flushCommands(remoteObject);
7446  console.log("RpcServer: flushCommands result: " + ret);
7447  ```
7448
7449### resetCallingIdentity
7450
7451static resetCallingIdentity(): string
7452
7453静态方法,将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。
7454
7455**系统能力**:SystemCapability.Communication.IPC.Core
7456
7457**返回值:**
7458
7459  | 类型   | 说明                                 |
7460  | ------ | ------------------------------------ |
7461  | string | 返回包含远程用户的UID和PID的字符串。 |
7462
7463**示例:**
7464
7465  ```ts
7466  class Stub extends rpc.RemoteObject {
7467      onRemoteMessageRequest(code, data, reply, option) {
7468          let callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
7469          console.log("RpcServer: callingIdentity is: " + callingIdentity);
7470          return true;
7471      }
7472  }
7473  ```
7474
7475
7476### restoreCallingIdentity<sup>9+</sup>
7477
7478static restoreCallingIdentity(identity: string): void
7479
7480静态方法,将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。
7481
7482**系统能力**:SystemCapability.Communication.IPC.Core
7483
7484**参数:**
7485
7486  | 参数名   | 类型   | 必填 | 说明                                                               |
7487  | -------- | ------ | ---- | ------------------------------------------------------------------ |
7488  | identity | string | 是   | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |
7489
7490**示例:**
7491
7492  ```ts
7493  class Stub extends rpc.RemoteObject {
7494      onRemoteMessageRequest(code, data, reply, option) {
7495          let callingIdentity = null;
7496          try {
7497              callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
7498              console.log("RpcServer: callingIdentity is: " + callingIdentity);
7499          } finally {
7500              rpc.IPCSkeleton.restoreCallingIdentity("callingIdentity ");
7501          }
7502          return true;
7503      }
7504  }
7505  ```
7506
7507### setCallingIdentity<sup>(deprecated)</sup>
7508
7509>从API version 9 开始不再维护,建议使用[restoreCallingIdentity](#restorecallingidentity9)类替代。
7510
7511static setCallingIdentity(identity: string): boolean
7512
7513静态方法,将UID和PID恢复为远程用户的UID和PID。它通常在使用resetCallingIdentity后调用,需要resetCallingIdentity返回的远程用户的UID和PID。
7514
7515**系统能力**:SystemCapability.Communication.IPC.Core
7516
7517**参数:**
7518
7519  | 参数名   | 类型   | 必填 | 说明                                                               |
7520  | -------- | ------ | ---- | ------------------------------------------------------------------ |
7521  | identity | string | 是   | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |
7522
7523**返回值:**
7524
7525  | 类型    | 说明                                      |
7526  | ------- | ----------------------------------------- |
7527  | boolean | true:设置成功,false:设置失败。|
7528
7529**示例:**
7530
7531  ```ts
7532  class Stub extends rpc.RemoteObject {
7533      onRemoteMessageRequest(code, data, reply, option) {
7534          let callingIdentity = null;
7535          try {
7536              callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
7537              console.log("RpcServer: callingIdentity is: " + callingIdentity);
7538          } finally {
7539              let ret = rpc.IPCSkeleton.setCallingIdentity("callingIdentity ");
7540              console.log("RpcServer: setCallingIdentity is: " + ret);
7541          }
7542          return true;
7543      }
7544  }
7545  ```
7546
7547## RemoteObject
7548
7549实现远程对象。服务提供者必须继承此类。
7550
7551### constructor
7552
7553constructor(descriptor: string)
7554
7555RemoteObject构造函数。
7556
7557**系统能力**:SystemCapability.Communication.IPC.Core
7558
7559**参数:**
7560
7561  | 参数名     | 类型   | 必填 | 说明         |
7562  | ---------- | ------ | ---- | ------------ |
7563  | descriptor | string | 是   | 接口描述符。 |
7564
7565
7566### sendRequest<sup>(deprecated)</sup>
7567
7568>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
7569
7570sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
7571
7572以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
7573
7574**系统能力**:SystemCapability.Communication.IPC.Core
7575
7576**参数:**
7577
7578  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
7579  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
7580  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7581  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
7582  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
7583  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7584
7585**返回值:**
7586
7587  | 类型    | 说明                                          |
7588  | ------- | --------------------------------------------- |
7589  | boolean | true:发送成功,false:发送失败。|
7590
7591**示例:**
7592
7593  ```ts
7594  class MyDeathRecipient {
7595      onRemoteDied() {
7596          console.log("server died");
7597      }
7598  }
7599  class TestRemoteObject extends rpc.RemoteObject {
7600      constructor(descriptor) {
7601          super(descriptor);
7602      }
7603      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7604          return true;
7605      }
7606      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7607          return true;
7608      }
7609      isObjectDead(): boolean {
7610          return false;
7611      }
7612  }
7613  let testRemoteObject = new TestRemoteObject("testObject");
7614  let option = new rpc.MessageOption();
7615  let data = rpc.MessageParcel.create();
7616  let reply = rpc.MessageParcel.create();
7617  data.writeInt(1);
7618  data.writeString("hello");
7619  let ret: boolean = testRemoteObject.sendRequest(1, data, reply, option);
7620  if (ret) {
7621      console.log("sendRequest got result");
7622      let msg = reply.readString();
7623      console.log("RPCTest: reply msg: " + msg);
7624  } else {
7625      console.log("RPCTest: sendRequest failed");
7626  }
7627  console.log("RPCTest: sendRequest ends, reclaim parcel");
7628  data.reclaim();
7629  reply.reclaim();
7630  ```
7631
7632### sendRequest<sup>8+(deprecated)</sup>
7633
7634>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
7635
7636sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise&lt;SendRequestResult&gt;
7637
7638以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
7639
7640**系统能力**:SystemCapability.Communication.IPC.Core
7641
7642**参数:**
7643
7644  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
7645  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
7646  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7647  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
7648  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
7649  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7650
7651**返回值:**
7652
7653  | 类型                             | 说明                                          |
7654  | -------------------------------- | --------------------------------------------- |
7655  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
7656
7657**示例:**
7658
7659  ```ts
7660  class MyDeathRecipient {
7661      onRemoteDied() {
7662          console.log("server died");
7663      }
7664  }
7665  class TestRemoteObject extends rpc.RemoteObject {
7666      constructor(descriptor) {
7667          super(descriptor);
7668      }
7669      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7670          return true;
7671      }
7672      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7673          return true;
7674      }
7675      isObjectDead(): boolean {
7676          return false;
7677      }
7678  }
7679  let testRemoteObject = new TestRemoteObject("testObject");
7680  let option = new rpc.MessageOption();
7681  let data = rpc.MessageParcel.create();
7682  let reply = rpc.MessageParcel.create();
7683  data.writeInt(1);
7684  data.writeString("hello");
7685  testRemoteObject.sendRequest(1, data, reply, option)
7686      .then(function(result) {
7687          if (result.errCode === 0) {
7688              console.log("sendRequest got result");
7689              result.reply.readException();
7690              let msg = result.reply.readString();
7691              console.log("RPCTest: reply msg: " + msg);
7692          } else {
7693              console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
7694          }
7695      }).catch(function(e) {
7696          console.log("RPCTest: sendRequest got exception: " + e.message);
7697      }).finally (() => {
7698          console.log("RPCTest: sendRequest ends, reclaim parcel");
7699          data.reclaim();
7700          reply.reclaim();
7701      });
7702  ```
7703
7704### sendMessageRequest<sup>9+</sup>
7705
7706sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise&lt;RequestResult&gt;
7707
7708以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。
7709
7710**系统能力**:SystemCapability.Communication.IPC.Core
7711
7712**参数:**
7713
7714  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
7715  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
7716  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7717  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
7718  | reply   | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
7719  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7720
7721**返回值:**
7722
7723  | 类型                         | 说明                                          |
7724  | ---------------------------- | --------------------------------------------- |
7725  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
7726
7727**示例:**
7728
7729  ```ts
7730  class TestRemoteObject extends rpc.RemoteObject {
7731      constructor(descriptor) {
7732          super(descriptor);
7733      }
7734  }
7735  let testRemoteObject = new TestRemoteObject("testObject");
7736  let option = new rpc.MessageOption();
7737  let data = rpc.MessageSequence.create();
7738  let reply = rpc.MessageSequence.create();
7739  data.writeInt(1);
7740  data.writeString("hello");
7741  testRemoteObject.sendMessageRequest(1, data, reply, option)
7742      .then(function(result) {
7743          if (result.errCode === 0) {
7744              console.log("sendMessageRequest got result");
7745              result.reply.readException();
7746              let msg = result.reply.readString();
7747              console.log("RPCTest: reply msg: " + msg);
7748          } else {
7749              console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
7750          }
7751      }).catch(function(e) {
7752          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
7753      }).finally (() => {
7754          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
7755          data.reclaim();
7756          reply.reclaim();
7757      });
7758  ```
7759
7760### sendMessageRequest<sup>9+</sup>
7761
7762sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void
7763
7764以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendMessageRequest返回时收到回调,回复内容在reply报文里。
7765
7766**系统能力**:SystemCapability.Communication.IPC.Core
7767
7768**参数:**
7769
7770  | 参数名        | 类型                               | 必填 | 说明                                                                                   |
7771  | ------------- | ---------------------------------- | ---- | -------------------------------------------------------------------------------------- |
7772  | code          | number                             | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7773  | data          | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
7774  | reply         | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
7775  | options       | [MessageOption](#messageoption)    | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7776  | AsyncCallback | AsyncCallback&lt;RequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |
7777
7778**示例:**
7779
7780  ```ts
7781  class TestRemoteObject extends rpc.RemoteObject {
7782      constructor(descriptor) {
7783          super(descriptor);
7784      }
7785  }
7786  function sendRequestCallback(result) {
7787      if (result.errCode === 0) {
7788          console.log("sendRequest got result");
7789          result.reply.readException();
7790          let msg = result.reply.readString();
7791          console.log("RPCTest: reply msg: " + msg);
7792      } else {
7793          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
7794      }
7795      console.log("RPCTest: sendRequest ends, reclaim parcel");
7796      result.data.reclaim();
7797      result.reply.reclaim();
7798  }
7799  let testRemoteObject = new TestRemoteObject("testObject");
7800  let option = new rpc.MessageOption();
7801  let data = rpc.MessageSequence.create();
7802  let reply = rpc.MessageSequence.create();
7803  data.writeInt(1);
7804  data.writeString("hello");
7805  testRemoteObject.sendMessageRequest(1, data, reply, option, sendRequestCallback);
7806  ```
7807
7808### sendRequest<sup>8+(deprecated)</sup>
7809
7810>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。
7811
7812sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
7813
7814以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
7815
7816**系统能力**:SystemCapability.Communication.IPC.Core
7817
7818**参数:**
7819
7820  | 参数名        | 类型                                   | 必填 | 说明                                                                                   |
7821  | ------------- | -------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
7822  | code          | number                                 | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7823  | data          | [MessageParcel](#messageparceldeprecated)        | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
7824  | reply         | [MessageParcel](#messageparceldeprecated)        | 是   | 接收应答数据的MessageParcel对象。                                                      |
7825  | options       | [MessageOption](#messageoption)        | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7826  | AsyncCallback | AsyncCallback&lt;SendRequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |
7827
7828**示例:**
7829
7830  ```ts
7831  class MyDeathRecipient {
7832      onRemoteDied() {
7833          console.log("server died");
7834      }
7835  }
7836  class TestRemoteObject extends rpc.RemoteObject {
7837      constructor(descriptor) {
7838          super(descriptor);
7839      }
7840      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7841          return true;
7842      }
7843      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7844          return true;
7845      }
7846      isObjectDead(): boolean {
7847          return false;
7848      }
7849  }
7850  function sendRequestCallback(result) {
7851      if (result.errCode === 0) {
7852          console.log("sendRequest got result");
7853          result.reply.readException();
7854          let msg = result.reply.readString();
7855          console.log("RPCTest: reply msg: " + msg);
7856      } else {
7857          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
7858      }
7859      console.log("RPCTest: sendRequest ends, reclaim parcel");
7860      result.data.reclaim();
7861      result.reply.reclaim();
7862  }
7863  let testRemoteObject = new TestRemoteObject("testObject");
7864  let option = new rpc.MessageOption();
7865  let data = rpc.MessageParcel.create();
7866  let reply = rpc.MessageParcel.create();
7867  data.writeInt(1);
7868  data.writeString("hello");
7869  testRemoteObject.sendRequest(1, data, reply, option, sendRequestCallback);
7870  ```
7871
7872### onRemoteRequest<sup>8+(deprecated)</sup>
7873
7874>从API version 9 开始不再维护,建议使用[onRemoteMessageRequest](#onremotemessagerequest9)类替代。
7875
7876onRemoteRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
7877
7878sendMessageRequest请求的响应处理函数,服务端在该函数里处理请求,回复结果。
7879
7880**系统能力**:SystemCapability.Communication.IPC.Core
7881
7882**参数:**
7883
7884  | 参数名 | 类型                            | 必填 | 说明                                    |
7885  | ------ | ------------------------------- | ---- | --------------------------------------- |
7886  | code   | number                          | 是   | 对端发送的服务请求码。                  |
7887  | data   | [MessageParcel](#messageparceldeprecated) | 是   | 携带客户端调用参数的MessageParcel对象。 |
7888  | reply  | [MessageParcel](#messageparceldeprecated) | 是   | 写入结果的MessageParcel对象。           |
7889  | option | [MessageOption](#messageoption) | 是   | 指示操作是同步还是异步。                |
7890
7891**返回值:**
7892
7893  | 类型    | 说明                                      |
7894  | ------- | ----------------------------------------- |
7895  | boolean | true:操作成功,false:操作失败。|
7896
7897**示例:**
7898
7899  ```ts
7900  class MyDeathRecipient {
7901      onRemoteDied() {
7902          console.log("server died");
7903      }
7904  }
7905  class TestRemoteObject extends rpc.RemoteObject {
7906      constructor(descriptor) {
7907          super(descriptor);
7908      }
7909      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7910          return true;
7911      }
7912      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
7913          return true;
7914      }
7915      isObjectDead(): boolean {
7916          return false;
7917      }
7918      onRemoteRequest(code, data, reply, option) {
7919          if (code === 1) {
7920              console.log("RpcServer: onRemoteRequest called");
7921              return true;
7922          } else {
7923              console.log("RpcServer: unknown code: " + code);
7924              return false;
7925          }
7926      }
7927  }
7928  ```
7929
7930### onRemoteMessageRequest<sup>9+</sup>
7931
7932onRemoteMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): boolean | Promise\<boolean>
7933
7934> **说明:**
7935>
7936>* 开发者应优先选择重载onRemoteMessageRequest方法,其中可以自由实现同步和异步的消息处理。
7937>* 开发者同时重载onRemoteRequest和onRemoteMessageRequest方法时,仅onRemoteMessageRequest方法生效。
7938
7939sendMessageRequest请求的响应处理函数,服务端在该函数里同步或异步地处理请求,回复结果。
7940
7941**系统能力**:SystemCapability.Communication.IPC.Core
7942
7943**参数:**
7944
7945  | 参数名 | 类型                            | 必填 | 说明                                      |
7946  | ------ | ------------------------------- | ---- | ----------------------------------------- |
7947  | code   | number                          | 是   | 对端发送的服务请求码。                    |
7948  | data   | [MessageSequence](#messagesequence9) | 是   | 携带客户端调用参数的MessageSequence对象。 |
7949  | reply  | [MessageSequence](#messagesequence9) | 是   | 写入结果的MessageSequence对象。           |
7950  | option | [MessageOption](#messageoption) | 是   | 指示操作是同步还是异步。                  |
7951
7952**返回值:**
7953
7954  | 类型              | 说明                                                                                           |
7955  | ----------------- | ---------------------------------------------------------------------------------------------- |
7956  | boolean           | 若在onRemoteMessageRequest中同步地处理请求,则返回一个布尔值:true:操作成功,false:操作失败。 |
7957  | Promise\<boolean> | 若在onRemoteMessageRequest中异步地处理请求,则返回一个Promise对象。                                 |
7958
7959**重载onRemoteMessageRequest方法同步处理请求示例:**
7960
7961  ```ts
7962  class TestRemoteObject extends rpc.RemoteObject {
7963      constructor(descriptor) {
7964          super(descriptor);
7965      }
7966
7967      onRemoteMessageRequest(code, data, reply, option) {
7968          if (code === 1) {
7969              console.log("RpcServer: sync onRemoteMessageRequest is called");
7970              return true;
7971          } else {
7972              console.log("RpcServer: unknown code: " + code);
7973              return false;
7974          }
7975      }
7976  }
7977  ```
7978
7979  **重载onRemoteMessageRequest方法异步处理请求示例:**
7980
7981  ```ts
7982  class TestRemoteObject extends rpc.RemoteObject {
7983      constructor(descriptor) {
7984          super(descriptor);
7985      }
7986
7987      async onRemoteMessageRequest(code, data, reply, option) {
7988          if (code === 1) {
7989              console.log("RpcServer: async onRemoteMessageRequest is called");
7990          } else {
7991              console.log("RpcServer: unknown code: " + code);
7992              return false;
7993          }
7994          await new Promise((resolve) => {
7995            setTimeout(resolve, 100);
7996          })
7997          return true;
7998      }
7999  }
8000  ```
8001
8002**同时重载onRemoteMessageRequest和onRemoteRequest方法同步处理请求示例:**
8003
8004  ```ts
8005  class TestRemoteObject extends rpc.RemoteObject {
8006      constructor(descriptor) {
8007          super(descriptor);
8008      }
8009
8010      onRemoteRequest(code, data, reply, option) {
8011          if (code === 1) {
8012              console.log("RpcServer: sync onRemoteMessageRequest is called");
8013              return true;
8014          } else {
8015              console.log("RpcServer: unknown code: " + code);
8016              return false;
8017          }
8018      }
8019      // 同时调用仅会执行onRemoteMessageRequest
8020      onRemoteMessageRequest(code, data, reply, option) {
8021          if (code === 1) {
8022              console.log("RpcServer: async onRemoteMessageRequest is called");
8023          } else {
8024              console.log("RpcServer: unknown code: " + code);
8025              return false;
8026          }
8027
8028          return true;
8029      }
8030  }
8031  ```
8032
8033  **同时重载onRemoteMessageRequest和onRemoteRequest方法异步处理请求示例:**
8034
8035  ```ts
8036  class TestRemoteObject extends rpc.RemoteObject {
8037      constructor(descriptor) {
8038          super(descriptor);
8039      }
8040
8041      onRemoteRequest(code, data, reply, option) {
8042          if (code === 1) {
8043              console.log("RpcServer: sync onRemoteRequest is called");
8044              return true;
8045          } else {
8046              console.log("RpcServer: unknown code: " + code);
8047              return false;
8048          }
8049      }
8050      // 同时调用仅会执行onRemoteMessageRequest
8051      async onRemoteMessageRequest(code, data, reply, option) {
8052          if (code === 1) {
8053              console.log("RpcServer: async onRemoteMessageRequest is called");
8054          } else {
8055              console.log("RpcServer: unknown code: " + code);
8056              return false;
8057          }
8058         await new Promise((resolve) => {
8059            setTimeout(resolve, 100);
8060          })
8061          return true;
8062      }
8063  }
8064  ```
8065
8066### getCallingUid
8067
8068getCallingUid(): number
8069
8070获取通信对端的进程Uid。
8071
8072**系统能力**:SystemCapability.Communication.IPC.Core
8073
8074**返回值:**
8075  | 类型   | 说明                    |
8076  | ------ | ----------------------- |
8077  | number | 返回通信对端的进程Uid。 |
8078
8079**示例:**
8080
8081  ```ts
8082  class TestRemoteObject extends rpc.RemoteObject {
8083      constructor(descriptor) {
8084          super(descriptor);
8085      }
8086  }
8087  let testRemoteObject = new TestRemoteObject("testObject");
8088  console.log("RpcServer: getCallingUid: " + testRemoteObject.getCallingUid());
8089  ```
8090
8091### getCallingPid
8092
8093getCallingPid(): number
8094
8095获取通信对端的进程Pid。
8096
8097**系统能力**:SystemCapability.Communication.IPC.Core
8098
8099**返回值:**
8100
8101  | 类型   | 说明                    |
8102  | ------ | ----------------------- |
8103  | number | 返回通信对端的进程Pid。 |
8104
8105**示例:**
8106
8107  ```ts
8108  class TestRemoteObject extends rpc.RemoteObject {
8109      constructor(descriptor) {
8110          super(descriptor);
8111      }
8112  }
8113  let testRemoteObject = new TestRemoteObject("testObject");
8114  console.log("RpcServer: getCallingPid: " + testRemoteObject.getCallingPid());
8115  ```
8116
8117### getLocalInterface<sup>9+</sup>
8118
8119getLocalInterface(descriptor: string): IRemoteBroker
8120
8121查询接口描述符的字符串。
8122
8123**系统能力**:SystemCapability.Communication.IPC.Core
8124
8125**参数:**
8126
8127  | 参数名     | 类型   | 必填 | 说明                 |
8128  | ---------- | ------ | ---- | -------------------- |
8129  | descriptor | string | 是   | 接口描述符的字符串。 |
8130
8131**返回值:**
8132
8133  | 类型          | 说明                                          |
8134  | ------------- | --------------------------------------------- |
8135  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
8136
8137
8138**示例:**
8139
8140  ```ts
8141  class MyDeathRecipient {
8142      onRemoteDied() {
8143          console.log("server died");
8144      }
8145  }
8146  class TestRemoteObject extends rpc.RemoteObject {
8147      constructor(descriptor) {
8148          super(descriptor);
8149      }
8150      registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8151          // 方法逻辑需开发者根据业务需要实现
8152      }
8153      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8154          // 方法逻辑需开发者根据业务需要实现
8155      }
8156      isObjectDead(): boolean {
8157          return false;
8158      }
8159  }
8160  let testRemoteObject = new TestRemoteObject("testObject");
8161  try {
8162      let broker = testRemoteObject.getLocalInterface("testObject");
8163  } catch(error) {
8164      console.info("rpc get local interface fail, errorCode " + error.code);
8165      console.info("rpc get local interface fail, errorMessage " + error.message);
8166  }
8167  ```
8168
8169### queryLocalInterface<sup>(deprecated)</sup>
8170
8171>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。
8172
8173queryLocalInterface(descriptor: string): IRemoteBroker
8174
8175查询并获取当前接口描述符对应的远端对象是否已经存在。
8176
8177**系统能力**:SystemCapability.Communication.IPC.Core
8178
8179**参数:**
8180
8181  | 参数名     | 类型   | 必填 | 说明                   |
8182  | ---------- | ------ | ---- | ---------------------- |
8183  | descriptor | string | 是   | 需要查询的接口描述符。 |
8184
8185**返回值:**
8186
8187  | 类型          | 说明                                                               |
8188  | ------------- | ------------------------------------------------------------------ |
8189  | IRemoteBroker | 如果接口描述符对应的远端对象存在,则返回该远端对象,否则返回Null。 |
8190
8191**示例:**
8192
8193  ```ts
8194  class MyDeathRecipient {
8195      onRemoteDied() {
8196          console.log("server died");
8197      }
8198  }
8199  class TestRemoteObject extends rpc.RemoteObject {
8200      constructor(descriptor) {
8201          super(descriptor);
8202      }
8203      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8204          return true;
8205      }
8206      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8207          return true;
8208      }
8209      isObjectDead(): boolean {
8210          return false;
8211      }
8212  }
8213  let testRemoteObject = new TestRemoteObject("testObject");
8214  let broker = testRemoteObject.queryLocalInterface("testObject");
8215  ```
8216
8217### getDescriptor<sup>9+</sup>
8218
8219getDescriptor(): string
8220
8221获取对象的接口描述符。接口描述符为字符串。
8222
8223**系统能力**:SystemCapability.Communication.IPC.Core
8224
8225**返回值:**
8226
8227  | 类型   | 说明             |
8228  | ------ | ---------------- |
8229  | string | 返回接口描述符。 |
8230
8231**错误码:**
8232
8233以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8234
8235  | 错误码ID | 错误信息 |
8236  | ------- | -------- |
8237  | 1900008 | proxy or remote object is invalid |
8238
8239**示例:**
8240
8241  ```ts
8242  class MyDeathRecipient {
8243      onRemoteDied() {
8244          console.log("server died");
8245      }
8246  }
8247  class TestRemoteObject extends rpc.RemoteObject {
8248      constructor(descriptor) {
8249          super(descriptor);
8250      }
8251      registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8252          // 方法逻辑需开发者根据业务需要实现
8253      }
8254      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8255          // 方法逻辑需开发者根据业务需要实现
8256      }
8257      isObjectDead(): boolean {
8258          return false;
8259      }
8260  }
8261  let testRemoteObject = new TestRemoteObject("testObject");
8262  console.log("RpcServer: descriptor is: " + descriptor);
8263  try {
8264      let descriptor = testRemoteObject.getDescriptor();
8265  } catch(error) {
8266      console.info("rpc get local interface fail, errorCode " + error.code);
8267      console.info("rpc get local interface fail, errorMessage " + error.message);
8268  }
8269  ```
8270
8271### getInterfaceDescriptor<sup>(deprecated)</sup>
8272
8273>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。
8274
8275getInterfaceDescriptor(): string
8276
8277查询接口描述符。
8278
8279**系统能力**:SystemCapability.Communication.IPC.Core
8280
8281**返回值:**
8282
8283  | 类型   | 说明             |
8284  | ------ | ---------------- |
8285  | string | 返回接口描述符。 |
8286
8287**示例:**
8288
8289  ```ts
8290  class MyDeathRecipient {
8291      onRemoteDied() {
8292          console.log("server died");
8293      }
8294  }
8295  class TestRemoteObject extends rpc.RemoteObject {
8296      constructor(descriptor) {
8297          super(descriptor);
8298      }
8299      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8300          return true;
8301      }
8302      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8303          return true;
8304      }
8305      isObjectDead(): boolean {
8306          return false;
8307      }
8308  }
8309  let testRemoteObject = new TestRemoteObject("testObject");
8310  let descriptor = testRemoteObject.getInterfaceDescriptor();
8311  console.log("RpcServer: descriptor is: " + descriptor);
8312  ```
8313
8314### modifyLocalInterface<sup>9+</sup>
8315
8316modifyLocalInterface(localInterface: IRemoteBroker, descriptor: string): void
8317
8318此接口用于把接口描述符和IRemoteBroker对象绑定。
8319
8320**系统能力**:SystemCapability.Communication.IPC.Core
8321
8322**参数:**
8323
8324  | 参数名         | 类型          | 必填 | 说明                                  |
8325  | -------------- | ------------- | ---- | ------------------------------------- |
8326  | localInterface | IRemoteBroker | 是   | 将与描述符绑定的IRemoteBroker对象。   |
8327  | descriptor     | string        | 是   | 用于与IRemoteBroker对象绑定的描述符。 |
8328
8329**示例:**
8330
8331  ```ts
8332  class MyDeathRecipient {
8333      onRemoteDied() {
8334          console.log("server died");
8335      }
8336  }
8337  class TestRemoteObject extends rpc.RemoteObject {
8338      constructor(descriptor) {
8339          super(descriptor);
8340          try {
8341              this.modifyLocalInterface(this, descriptor);
8342          } catch(error) {
8343              console.info(" rpc attach local interface fail, errorCode " + error.code);
8344              console.info(" rpc attach local interface fail, errorMessage " + error.message);
8345          }
8346      }
8347      registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8348          // 方法逻辑需开发者根据业务需要实现
8349      }
8350      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
8351          // 方法逻辑需开发者根据业务需要实现
8352      }
8353      isObjectDead(): boolean {
8354          return false;
8355      }
8356      asObject(): rpc.IRemoteObject {
8357          return this;
8358      }
8359  }
8360  let testRemoteObject = new TestRemoteObject("testObject");
8361  ```
8362
8363### attachLocalInterface<sup>(deprecated)</sup>
8364
8365>从API version 9 开始不再维护,建议使用[modifyLocalInterface](#modifylocalinterface9)类替代。
8366
8367attachLocalInterface(localInterface: IRemoteBroker, descriptor: string): void
8368
8369此接口用于把接口描述符和IRemoteBroker对象绑定。
8370
8371**系统能力**:SystemCapability.Communication.IPC.Core
8372
8373**参数:**
8374
8375  | 参数名         | 类型          | 必填 | 说明                                  |
8376  | -------------- | ------------- | ---- | ------------------------------------- |
8377  | localInterface | IRemoteBroker | 是   | 将与描述符绑定的IRemoteBroker对象。   |
8378  | descriptor     | string        | 是   | 用于与IRemoteBroker对象绑定的描述符。 |
8379
8380**示例:**
8381
8382  ```ts
8383  class MyDeathRecipient {
8384      onRemoteDied() {
8385          console.log("server died");
8386      }
8387  }
8388  class TestRemoteObject extends rpc.RemoteObject {
8389      constructor(descriptor) {
8390          super(descriptor);
8391          this.attachLocalInterface(this, descriptor);
8392      }
8393      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8394          return true;
8395      }
8396      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
8397          return true;
8398      }
8399      isObjectDead(): boolean {
8400          return false;
8401      }
8402      asObject(): rpc.IRemoteObject {
8403          return this;
8404      }
8405  }
8406  let testRemoteObject = new TestRemoteObject("testObject");
8407  ```
8408
8409## Ashmem<sup>8+</sup>
8410
8411提供与匿名共享内存对象相关的方法,包括创建、关闭、映射和取消映射Ashmem、从Ashmem读取数据和写入数据、获取Ashmem大小、设置Ashmem保护。
8412
8413**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core8414
8415映射内存保护类型:
8416
8417  | 名称       | 值  | 说明               |
8418  | ---------- | --- | ------------------ |
8419  | PROT_EXEC  | 4   | 映射的内存可执行   |
8420  | PROT_NONE  | 0   | 映射的内存不可访问 |
8421  | PROT_READ  | 1   | 映射的内存可读     |
8422  | PROT_WRITE | 2   | 映射的内存可写     |
8423
8424### create<sup>9+</sup>
8425
8426static create(name: string, size: number): Ashmem
8427
8428静态方法,根据指定的名称和大小创建Ashmem对象。
8429
8430**系统能力**:SystemCapability.Communication.IPC.Core
8431
8432**参数:**
8433
8434  | 参数名 | 类型   | 必填 | 说明                         |
8435  | ------ | ------ | ---- | ---------------------------- |
8436  | name   | string | 是   | 名称,用于查询Ashmem信息。   |
8437  | size   | number | 是   | Ashmem的大小,以字节为单位。 |
8438
8439**返回值:**
8440
8441  | 类型   | 说明                                           |
8442  | ------ | ---------------------------------------------- |
8443  | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
8444
8445**示例:**
8446
8447  ```ts
8448  let ashmem;
8449  try {
8450      ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8451  } catch(error) {
8452      console.info("Rpc creat ashmem fail, errorCode " + error.code);
8453      console.info("Rpc creat ashmem  fail, errorMessage " + error.message);
8454  }
8455  let size = ashmem.getAshmemSize();
8456  console.log("RpcTest: get ashemm by create : " + ashmem + " size is : " + size);
8457  ```
8458
8459### createAshmem<sup>8+(deprecated)</sup>
8460
8461>从API version 9 开始不再维护,建议使用[create](#create9)类替代。
8462
8463static createAshmem(name: string, size: number): Ashmem
8464
8465静态方法,根据指定的名称和大小创建Ashmem对象。
8466
8467**系统能力**:SystemCapability.Communication.IPC.Core
8468
8469**参数:**
8470
8471  | 参数名 | 类型   | 必填 | 说明                         |
8472  | ------ | ------ | ---- | ---------------------------- |
8473  | name   | string | 是   | 名称,用于查询Ashmem信息。   |
8474  | size   | number | 是   | Ashmem的大小,以字节为单位。 |
8475
8476**返回值:**
8477
8478  | 类型   | 说明                                           |
8479  | ------ | ---------------------------------------------- |
8480  | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
8481
8482**示例:**
8483
8484  ```ts
8485  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8486  let size = ashmem.getAshmemSize();
8487  console.log("RpcTest: get ashemm by createAshmem : " + ashmem + " size is : " + size);
8488  ```
8489
8490### create<sup>9+</sup>
8491
8492static create(ashmem: Ashmem): Ashmem
8493
8494静态方法,通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。
8495
8496**系统能力**:SystemCapability.Communication.IPC.Core
8497
8498**参数:**
8499
8500  | 参数名 | 类型   | 必填 | 说明                 |
8501  | ------ | ------ | ---- | -------------------- |
8502  | ashmem | Ashmem | 是   | 已存在的Ashmem对象。 |
8503
8504**返回值:**
8505
8506  | 类型   | 说明                   |
8507  | ------ | ---------------------- |
8508  | Ashmem | 返回创建的Ashmem对象。 |
8509
8510
8511**示例:**
8512
8513  ```ts
8514  let ashmem2;
8515  try {
8516      let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8517      let ashmem2 = rpc.Ashmem.create(ashmem);
8518  } catch(error) {
8519      console.info("Rpc creat ashmem from existing fail, errorCode " + error.code);
8520      console.info("Rpc creat ashmem from existing  fail, errorMessage " + error.message);
8521  }
8522  let size = ashmem2.getAshmemSize();
8523  console.log("RpcTest: get ashemm by create : " + ashmem2 + " size is : " + size);
8524  ```
8525
8526### createAshmemFromExisting<sup>8+(deprecated)</sup>
8527
8528>从API version 9 开始不再维护,建议使用[create](#create9)类替代。
8529
8530static createAshmemFromExisting(ashmem: Ashmem): Ashmem
8531
8532静态方法,通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。
8533
8534**系统能力**:SystemCapability.Communication.IPC.Core
8535
8536**参数:**
8537
8538  | 参数名 | 类型   | 必填 | 说明                 |
8539  | ------ | ------ | ---- | -------------------- |
8540  | ashmem | Ashmem | 是   | 已存在的Ashmem对象。 |
8541
8542**返回值:**
8543
8544  | 类型   | 说明                   |
8545  | ------ | ---------------------- |
8546  | Ashmem | 返回创建的Ashmem对象。 |
8547
8548**示例:**
8549
8550  ```ts
8551  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8552  let ashmem2 = rpc.Ashmem.createAshmemFromExisting(ashmem);
8553  let size = ashmem2.getAshmemSize();
8554  console.log("RpcTest: get ashemm by createAshmemFromExisting : " + ashmem2 + " size is : " + size);
8555  ```
8556
8557### closeAshmem<sup>8+</sup>
8558
8559closeAshmem(): void
8560
8561关闭这个Ashmem。
8562
8563**系统能力**:SystemCapability.Communication.IPC.Core
8564
8565**示例:**
8566
8567  ```ts
8568  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8569  ashmem.closeAshmem();
8570  ```
8571
8572### unmapAshmem<sup>8+</sup>
8573
8574unmapAshmem(): void
8575
8576删除该Ashmem对象的地址映射。
8577
8578**系统能力**:SystemCapability.Communication.IPC.Core
8579
8580**示例:**
8581
8582  ```ts
8583  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8584  ashmem.unmapAshmem();
8585  ```
8586
8587### getAshmemSize<sup>8+</sup>
8588
8589getAshmemSize(): number
8590
8591获取Ashmem对象的内存大小。
8592
8593**系统能力**:SystemCapability.Communication.IPC.Core
8594
8595**返回值:**
8596
8597  | 类型   | 说明                       |
8598  | ------ | -------------------------- |
8599  | number | 返回Ashmem对象的内存大小。 |
8600
8601**示例:**
8602
8603  ```ts
8604  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8605  let size = ashmem.getAshmemSize();
8606  console.log("RpcTest: get ashmem is " + ashmem + " size is : " + size);
8607  ```
8608
8609### mapTypedAshmem<sup>9+</sup>
8610
8611mapTypedAshmem(mapType: number): void
8612
8613在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。
8614
8615**系统能力**:SystemCapability.Communication.IPC.Core
8616
8617**参数:**
8618
8619  | 参数名  | 类型   | 必填 | 说明                           |
8620  | ------- | ------ | ---- | ------------------------------ |
8621  | mapType | number | 是   | 指定映射的内存区域的保护等级。 |
8622
8623**错误码:**
8624
8625以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8626
8627  | 错误码ID | 错误信息 |
8628  | ------- | ------ |
8629  | 1900001     | call mmap function failed |
8630
8631**示例:**
8632
8633  ```ts
8634  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8635  try {
8636      ashmem.mapTypedAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
8637  } catch(error) {
8638      console.info("Rpc map ashmem fail, errorCode " + error.code);
8639      console.info("Rpc map ashmem fail, errorMessage " + error.message);
8640  }
8641  ```
8642
8643### mapAshmem<sup>8+(deprecated)</sup>
8644
8645>从API version 9 开始不再维护,建议使用[mapTypedAshmem](#maptypedashmem9)类替代。
8646
8647mapAshmem(mapType: number): boolean
8648
8649在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。
8650
8651**系统能力**:SystemCapability.Communication.IPC.Core
8652
8653**参数:**
8654
8655  | 参数名  | 类型   | 必填 | 说明                           |
8656  | ------- | ------ | ---- | ------------------------------ |
8657  | mapType | number | 是   | 指定映射的内存区域的保护等级。 |
8658
8659**返回值:**
8660
8661  | 类型    | 说明                                      |
8662  | ------- | ----------------------------------------- |
8663  | boolean | true:映射成功,false:映射失败。|
8664
8665**示例:**
8666
8667  ```ts
8668  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8669  let mapReadAndWrite = ashmem.mapAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
8670  console.log("RpcTest: map ashmem result is  : " + mapReadAndWrite);
8671  ```
8672
8673### mapReadWriteAshmem<sup>9+</sup>
8674
8675mapReadWriteAshmem(): void
8676
8677在此进程虚拟地址空间上创建可读写的共享文件映射。
8678
8679**系统能力**:SystemCapability.Communication.IPC.Core
8680
8681**错误码:**
8682
8683以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8684
8685  | 错误码ID | 错误信息 |
8686  | ------- | -------- |
8687  | 1900001 | call mmap function failed |
8688
8689**示例:**
8690
8691  ```ts
8692  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8693  try {
8694      ashmem.mapReadWriteAshmem();
8695  } catch(error) {
8696      console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
8697      console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
8698  }
8699  ```
8700
8701### mapReadAndWriteAshmem<sup>8+(deprecated)</sup>
8702
8703>从API version 9 开始不再维护,建议使用[mapReadWriteAshmem](#mapreadwriteashmem9)类替代。
8704
8705mapReadAndWriteAshmem(): boolean
8706
8707在此进程虚拟地址空间上创建可读写的共享文件映射。
8708
8709**系统能力**:SystemCapability.Communication.IPC.Core
8710
8711**返回值:**
8712
8713  | 类型    | 说明                                      |
8714  | ------- | ----------------------------------------- |
8715  | boolean | true:映射成功,false:映射失败。|
8716
8717**示例:**
8718
8719  ```ts
8720  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8721  let mapResult = ashmem.mapReadAndWriteAshmem();
8722  console.log("RpcTest: map ashmem result is  : " + mapResult);
8723  ```
8724
8725### mapReadonlyAshmem<sup>9+</sup>
8726
8727mapReadonlyAshmem(): void
8728
8729在此进程虚拟地址空间上创建只读的共享文件映射。
8730
8731**系统能力**:SystemCapability.Communication.IPC.Core
8732
8733**错误码:**
8734
8735以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8736
8737  | 错误码ID | 错误信息 |
8738  | ------- | -------- |
8739  | 1900001 | call mmap function failed |
8740
8741**示例:**
8742
8743  ```ts
8744  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8745  try {
8746      ashmem.mapReadonlyAshmem();
8747  } catch(error) {
8748      console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
8749      console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
8750  }
8751  ```
8752
8753### mapReadOnlyAshmem<sup>8+(deprecated)</sup>
8754
8755>从API version 9 开始不再维护,建议使用[mapReadonlyAshmem](#mapreadonlyashmem9)类替代。
8756
8757mapReadOnlyAshmem(): boolean
8758
8759在此进程虚拟地址空间上创建只读的共享文件映射。
8760
8761**系统能力**:SystemCapability.Communication.IPC.Core
8762
8763**返回值:**
8764
8765  | 类型    | 说明                                      |
8766  | ------- | ----------------------------------------- |
8767  | boolean | true:映射成功,false:映射失败。|
8768
8769**示例:**
8770
8771  ```ts
8772  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8773  let mapResult = ashmem.mapReadOnlyAshmem();
8774  console.log("RpcTest: Ashmem mapReadOnlyAshmem result is : " + mapResult);
8775  ```
8776
8777### setProtectionType<sup>9+</sup>
8778
8779setProtectionType(protectionType: number): void
8780
8781设置映射内存区域的保护等级。
8782
8783**系统能力**:SystemCapability.Communication.IPC.Core
8784
8785**参数:**
8786
8787  | 参数名         | 类型   | 必填 | 说明               |
8788  | -------------- | ------ | ---- | ------------------ |
8789  | protectionType | number | 是   | 要设置的保护类型。 |
8790
8791**错误码:**
8792
8793以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8794
8795  | 错误码ID | 错误信息 |
8796  | -------- | ------- |
8797  | 1900002 | call os ioctl function failed |
8798
8799**示例:**
8800
8801  ```ts
8802  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8803  try {
8804      ashmem.setProtection(ashmem.PROT_READ);
8805  } catch(error) {
8806      console.info("Rpc set protection type fail, errorCode " + error.code);
8807      console.info("Rpc set protection type fail, errorMessage " + error.message);
8808  }
8809  ```
8810
8811### setProtection<sup>8+(deprecated)</sup>
8812
8813>从API version 9 开始不再维护,建议使用[setProtectionType](#setprotectiontype9)类替代。
8814
8815setProtection(protectionType: number): boolean
8816
8817设置映射内存区域的保护等级。
8818
8819**系统能力**:SystemCapability.Communication.IPC.Core
8820
8821**参数:**
8822
8823  | 参数名         | 类型   | 必填 | 说明               |
8824  | -------------- | ------ | ---- | ------------------ |
8825  | protectionType | number | 是   | 要设置的保护类型。 |
8826
8827**返回值:**
8828
8829  | 类型    | 说明                                      |
8830  | ------- | ----------------------------------------- |
8831  | boolean | true:设置成功,false:设置失败。|
8832
8833**示例:**
8834
8835  ```ts
8836  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8837  let result = ashmem.setProtection(ashmem.PROT_READ);
8838  console.log("RpcTest: Ashmem setProtection result is : " + result);
8839  ```
8840
8841### writeAshmem<sup>9+</sup>
8842
8843writeAshmem(buf: number[], size: number, offset: number): void
8844
8845将数据写入此Ashmem对象关联的共享文件。
8846
8847**系统能力**:SystemCapability.Communication.IPC.Core
8848
8849**参数:**
8850
8851  | 参数名 | 类型     | 必填 | 说明                                               |
8852  | ------ | -------- | ---- | -------------------------------------------------- |
8853  | buf    | number[] | 是   | 写入Ashmem对象的数据。                             |
8854  | size   | number   | 是   | 要写入的数据大小。                                 |
8855  | offset | number   | 是   | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |
8856
8857**错误码:**
8858
8859以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8860
8861  | 错误码ID | 错误信息 |
8862  | ------- | -------- |
8863  | 1900003 | write to ashmem failed |
8864
8865**示例:**
8866
8867  ```ts
8868  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8869  ashmem.mapReadWriteAshmem();
8870  var ByteArrayVar = [1, 2, 3, 4, 5];
8871  try {
8872      ashmem.writeAshmem(ByteArrayVar, 5, 0);
8873  } catch(error) {
8874      console.info("Rpc write to ashmem fail, errorCode " + error.code);
8875      console.info("Rpc write to ashmem fail, errorMessage " + error.message);
8876  }
8877  ```
8878
8879### writeToAshmem<sup>8+(deprecated)</sup>
8880
8881>从API version 9 开始不再维护,建议使用[writeAshmem](#writeashmem9)类替代。
8882
8883writeToAshmem(buf: number[], size: number, offset: number): boolean
8884
8885将数据写入此Ashmem对象关联的共享文件。
8886
8887**系统能力**:SystemCapability.Communication.IPC.Core
8888
8889**参数:**
8890
8891  | 参数名 | 类型     | 必填 | 说明                                               |
8892  | ------ | -------- | ---- | -------------------------------------------------- |
8893  | buf    | number[] | 是   | 写入Ashmem对象的数据。                             |
8894  | size   | number   | 是   | 要写入的数据大小。                                 |
8895  | offset | number   | 是   | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |
8896
8897**返回值:**
8898
8899  | 类型    | 说明                                                                                      |
8900  | ------- | ----------------------------------------------------------------------------------------- |
8901  | boolean | true:如果数据写入成功,false:在其他情况下,如数据写入越界或未获得写入权限。。 |
8902
8903**示例:**
8904
8905  ```ts
8906  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8907  let mapResult = ashmem.mapReadAndWriteAshmem();
8908  console.info("RpcTest map ashmem result is " + mapResult);
8909  var ByteArrayVar = [1, 2, 3, 4, 5];
8910  let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
8911  console.log("RpcTest: write to Ashmem result is  : " + writeResult);
8912  ```
8913
8914### readAshmem<sup>9+</sup>
8915
8916readAshmem(size: number, offset: number): number[]
8917
8918从此Ashmem对象关联的共享文件中读取数据。
8919
8920**系统能力**:SystemCapability.Communication.IPC.Core
8921
8922**参数:**
8923
8924  | 参数名 | 类型   | 必填 | 说明                                               |
8925  | ------ | ------ | ---- | -------------------------------------------------- |
8926  | size   | number | 是   | 要读取的数据的大小。                               |
8927  | offset | number | 是   | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |
8928
8929**返回值:**
8930
8931  | 类型     | 说明             |
8932  | -------- | ---------------- |
8933  | number[] | 返回读取的数据。 |
8934
8935**错误码:**
8936
8937以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
8938
8939  | 错误码ID  | 错误信息 |
8940  | -------- | -------- |
8941  | 1900004 | read from ashmem failed |
8942
8943**示例:**
8944
8945  ```ts
8946  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
8947  ashmem.mapReadWriteAshmem();
8948  var ByteArrayVar = [1, 2, 3, 4, 5];
8949  ashmem.writeAshmem(ByteArrayVar, 5, 0);
8950  try {
8951      let readResult = ashmem.readAshmem(5, 0);
8952      console.log("RpcTest: read from Ashmem result is  : " + readResult);
8953  } catch(error) {
8954      console.info("Rpc read from ashmem fail, errorCode " + error.code);
8955      console.info("Rpc read from ashmem fail, errorMessage " + error.message);
8956  }
8957  ```
8958
8959### readFromAshmem<sup>8+(deprecated)</sup>
8960
8961>从API version 9 开始不再维护,建议使用[readAshmem](#readashmem9)类替代。
8962
8963readFromAshmem(size: number, offset: number): number[]
8964
8965从此Ashmem对象关联的共享文件中读取数据。
8966
8967**系统能力**:SystemCapability.Communication.IPC.Core
8968
8969**参数:**
8970
8971  | 参数名 | 类型   | 必填 | 说明                                               |
8972  | ------ | ------ | ---- | -------------------------------------------------- |
8973  | size   | number | 是   | 要读取的数据的大小。                               |
8974  | offset | number | 是   | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |
8975
8976**返回值:**
8977
8978  | 类型     | 说明             |
8979  | -------- | ---------------- |
8980  | number[] | 返回读取的数据。 |
8981
8982**示例:**
8983
8984 ```ts
8985  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
8986  let mapResult = ashmem.mapReadAndWriteAshmem();
8987  console.info("RpcTest map ashmem result is " + mapResult);
8988  var ByteArrayVar = [1, 2, 3, 4, 5];
8989  let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
8990  console.log("RpcTest: write to Ashmem result is  : " + writeResult);
8991  let readResult = ashmem.readFromAshmem(5, 0);
8992  console.log("RpcTest: read to Ashmem result is  : " + readResult);
8993  ```