• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RPC通信
2
3本模块提供进程间通信能力,包括设备内的进程间通信(IPC)和设备间的进程间通信(RPC),前者基于Binder驱动,后者基于软总线驱动。
4
5> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
6> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
7
8
9## 导入模块
10
11
12```
13import rpc from '@ohos.rpc';
14```
15
16
17## MessageParcel
18
19该类提供读写基础类型及数组、IPC对象、接口描述符和自定义序列化对象的方法。
20
21
22### create
23
24create(): MessageParcel
25
26静态方法,创建MessageParcel对象。
27
28**系统能力**:SystemCapability.Communication.IPC.Core
29
30**返回值:**
31    | 类型 | 说明 |
32  | -------- | -------- |
33  | MessageParcel | 返回创建的MessageParcel对象。 |
34
35**示例:**
36
37  ```
38  let data = rpc.MessageParcel.create();
39  console.log("RpcClient: data is " + data);
40  ```
41
42
43### reclaim
44
45reclaim(): void
46
47释放不再使用的MessageParcel对象。
48
49**系统能力**:SystemCapability.Communication.IPC.Core
50
51**示例:**
52
53  ```
54  let reply = rpc.MessageParcel.create();
55  reply.reclaim();
56  ```
57
58
59### writeRemoteObject
60
61writeRemoteObject(object: [IRemoteObject](#iremoteobject)): boolean
62
63  序列化远程对象并将其写入MessageParcel对象。
64
65**系统能力**:SystemCapability.Communication.IPC.Core
66
67**参数:**
68    | 参数名 | 类型 | 必填 | 说明 |
69  | -------- | -------- | -------- | -------- |
70  | object | [IRemoteObject](#iremoteobject) | 是 | 要序列化并写入MessageParcel的远程对象。 |
71
72**返回值:**
73    | 类型 | 说明 |
74  | -------- | -------- |
75  | boolean | 如果操作成功,则返回true;否则返回false。 |
76
77**示例:**
78
79  ```
80  class MyDeathRecipient {
81      onRemoteDied() {
82          console.log("server died");
83      }
84  }
85  class TestRemoteObject extends rpc.RemoteObject {
86      constructor(descriptor) {
87          super(descriptor);
88      }
89      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
90          return true;
91      }
92      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
93          return true;
94      }
95      isObjectDead(): boolean {
96          return false;
97      }
98  }
99  let data = rpc.MessageParcel.create();
100  let testRemoteObject = new TestRemoteObject("testObject");
101  data.writeRemoteObject(testRemoteObject);
102  ```
103
104
105### readRemoteObject
106
107readRemoteObject(): IRemoteObject
108
109从MessageParcel读取远程对象。此方法用于反序列化MessageParcel对象以生成IRemoteObject。远程对象按写入MessageParcel的顺序读取。
110
111**系统能力**:SystemCapability.Communication.IPC.Core
112
113**返回值:**
114    | 类型 | 说明 |
115  | -------- | -------- |
116  | [IRemoteObject](#iremoteobject) | 读取到的远程对象。 |
117
118**示例:**
119
120  ```
121  class MyDeathRecipient {
122      onRemoteDied() {
123          console.log("server died");
124      }
125  }
126  class TestRemoteObject extends rpc.RemoteObject {
127      constructor(descriptor) {
128          super(descriptor);
129      }
130      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
131          return true;
132      }
133      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
134          return true;
135      }
136      isObjectDead(): boolean {
137          return false;
138      }
139  }
140  let data = rpc.MessageParcel.create();
141  let testRemoteObject = new TestRemoteObject("testObject");
142  data.writeRemoteObject(testRemoteObject);
143  let proxy = data.readRemoteObject();
144  ```
145
146
147### writeInterfaceToken
148
149writeInterfaceToken(token: string): boolean
150
151将接口描述符写入MessageParcel对象。
152
153**系统能力**:SystemCapability.Communication.IPC.Core
154
155**参数:**
156    | 参数名 | 类型 | 必填 | 说明 |
157  | -------- | -------- | -------- | -------- |
158  | token | string | 是 | 字符串类型描述符。 |
159
160**返回值:**
161    | 类型 | 说明 |
162  | -------- | -------- |
163  | boolean | 如果操作成功,则返回true;否则返回false。 |
164
165**示例:**
166
167  ```
168  let data = rpc.MessageParcel.create();
169  let result = data.writeInterfaceToken("aaa");
170  console.log("RpcServer: writeInterfaceToken is " + result);
171  ```
172
173
174### readInterfaceToken
175
176readInterfaceToken(): string
177
178从MessageParcel中读取接口描述符。接口描述符按写入MessageParcel的顺序读取。
179
180**系统能力**:SystemCapability.Communication.IPC.Core
181
182**返回值:**
183    | 类型 | 说明 |
184  | -------- | -------- |
185  | string | 返回读取到的接口描述符。 |
186
187**示例:**
188
189  ```
190  class Stub extends rpc.RemoteObject {
191      onRemoteRequest(code, data, reply, option) {
192          let interfaceToken = data.readInterfaceToken();
193          console.log("RpcServer: interfaceToken is " + interfaceToken);
194          return true;
195      }
196  }
197  ```
198
199
200### getSize
201
202getSize(): number
203
204获取当前MessageParcel的数据大小。
205
206**系统能力**:SystemCapability.Communication.IPC.Core
207
208**返回值:**
209    | 类型 | 说明 |
210  | -------- | -------- |
211  | number | 获取的MessageParcel的数据大小。以字节为单位。 |
212
213**示例:**
214
215  ```
216  let data = rpc.MessageParcel.create();
217  let size = data.getSize();
218  console.log("RpcClient: size is " + size);
219  ```
220
221
222### getCapacity
223
224getCapacity(): number
225
226获取当前MessageParcel的容量。
227
228**系统能力**:SystemCapability.Communication.IPC.Core
229
230**返回值:**
231    | 类型 | 说明 |
232  | -------- | -------- |
233  | number | 获取的MessageParcel的容量大小。以字节为单位。 |
234
235**示例:**
236
237  ```
238  let data = rpc.MessageParcel.create();
239  let result = data.getCapacity();
240  console.log("RpcClient: capacity is " + result);
241  ```
242
243
244### setSize
245
246setSize(size: number): boolean
247
248设置MessageParcel实例中包含的数据大小。
249
250**系统能力**:SystemCapability.Communication.IPC.Core
251
252**参数:**
253    | 参数名 | 类型 | 必填 | 说明 |
254  | -------- | -------- | -------- | -------- |
255  | size | number | 是 | MessageParcel实例的数据大小。以字节为单位。 |
256
257**返回值:**
258    | 类型 | 说明 |
259  | -------- | -------- |
260  | boolean | 设置成功返回true,否则返回false。 |
261
262**示例:**
263
264  ```
265  let data = rpc.MessageParcel.create();
266  let setSize = data.setSize(16);
267  console.log("RpcClient: setSize is " + setSize);
268  ```
269
270
271### setCapacity
272
273setCapacity(size: number): boolean
274
275设置MessageParcel实例的存储容量。
276
277**系统能力**:SystemCapability.Communication.IPC.Core
278
279**参数:**
280    | 参数名 | 类型 | 必填 | 说明 |
281  | -------- | -------- | -------- | -------- |
282  | size | number | 是 | MessageParcel实例的存储容量。以字节为单位。 |
283
284**返回值:**
285    | 类型 | 说明 |
286  | -------- | -------- |
287  | boolean | 设置成功返回true,否则返回false。 |
288
289**示例:**
290
291  ```
292  let data = rpc.MessageParcel.create();
293  let result = data.setCapacity(100);
294  console.log("RpcClient: setCapacity is " + result);
295  ```
296
297
298### getWritableBytes
299
300getWritableBytes(): number
301
302获取MessageParcel的可写字节空间。
303
304**系统能力**:SystemCapability.Communication.IPC.Core
305
306**返回值:**
307    | 类型 | 说明 |
308  | -------- | -------- |
309  | number | 获取到的MessageParcel的可写字节空间。以字节为单位。 |
310
311**示例:**
312
313  ```
314  class Stub extends rpc.RemoteObject {
315      onRemoteRequest(code, data, reply, option) {
316          let getWritableBytes = data.getWritableBytes();
317          console.log("RpcServer: getWritableBytes is " + getWritableBytes);
318          return true;
319      }
320  }
321  ```
322
323
324### getReadableBytes
325
326getReadableBytes(): number
327
328获取MessageParcel的可读字节空间。
329
330**系统能力**:SystemCapability.Communication.IPC.Core
331
332**返回值:**
333    | 类型 | 说明 |
334  | -------- | -------- |
335  | number | 获取到的MessageParcel的可读字节空间。以字节为单位。 |
336
337**示例:**
338
339  ```
340  class Stub extends rpc.RemoteObject {
341      onRemoteRequest(code, data, reply, option) {
342          let result = data.getReadableBytes();
343          console.log("RpcServer: getReadableBytes is " + result);
344          return true;
345      }
346  }
347  ```
348
349
350### getReadPosition
351
352getReadPosition(): number
353
354获取MessageParcel的读位置。
355
356**系统能力**:SystemCapability.Communication.IPC.Core
357
358**返回值:**
359    | 类型 | 说明 |
360  | -------- | -------- |
361  | number | 返回MessageParcel实例中的当前读取位置。 |
362
363**示例:**
364
365  ```
366  let data = rpc.MessageParcel.create();
367  let readPos = data.getReadPosition();
368  console.log("RpcClient: readPos is " + readPos);
369  ```
370
371
372### getWritePosition
373
374getWritePosition(): number
375
376获取MessageParcel的写位置。
377
378**系统能力**:SystemCapability.Communication.IPC.Core
379
380**返回值:**
381    | 类型 | 说明 |
382  | -------- | -------- |
383  | number | 返回MessageParcel实例中的当前写入位置。 |
384
385**示例:**
386
387  ```
388  let data = rpc.MessageParcel.create();
389  data.writeInt(10);
390  let bwPos = data.getWritePosition();
391  console.log("RpcClient: bwPos is " + bwPos);
392  ```
393
394
395### rewindRead
396
397rewindRead(pos: number): boolean
398
399重新偏移读取位置到指定的位置。
400
401**系统能力**:SystemCapability.Communication.IPC.Core
402
403**参数:**
404    | 参数名 | 类型 | 必填 | 说明 |
405  | -------- | -------- | -------- | -------- |
406  | pos | number | 是 | 开始读取数据的目标位置。 |
407
408**返回值:**
409    | 类型 | 说明 |
410  | -------- | -------- |
411  | boolean | 如果读取位置发生更改,则返回true;否则返回false。 |
412
413**示例:**
414
415  ```
416  let data = rpc.MessageParcel.create();
417  data.writeInt(12);
418  data.writeString("parcel");
419  let number = data.readInt();
420  console.log("RpcClient: number is " + number);
421  data.rewindRead(0);
422  let number2 = data.readInt();
423  console.log("RpcClient: rewindRead is " + number2);
424  ```
425
426
427### rewindWrite
428
429rewindWrite(pos: number): boolean
430
431重新偏移写位置到指定的位置。
432
433**系统能力**:SystemCapability.Communication.IPC.Core
434
435**参数:**
436    | 参数名 | 类型 | 必填 | 说明 |
437  | -------- | -------- | -------- | -------- |
438  | pos | number | 是 | 开始写入数据的目标位置。 |
439
440**返回值:**
441    | 类型 | 说明 |
442  | -------- | -------- |
443  | boolean | 如果写入位置更改,则返回true;否则返回false。 |
444
445**示例:**
446
447  ```
448  let data = rpc.MessageParcel.create();
449  data.writeInt(4);
450  data.rewindWrite(0);
451  data.writeInt(5);
452  let number = data.readInt();
453  console.log("RpcClient: rewindWrite is: " + number);
454  ```
455
456
457### writeByte
458
459writeByte(val: number): boolean
460
461将字节值写入MessageParcel实例。
462
463**系统能力**:SystemCapability.Communication.IPC.Core
464
465**参数:**
466    | 参数名 | 类型 | 必填 | 说明 |
467  | -------- | -------- | -------- | -------- |
468  | val | number | 是 | 要写入的字节值。 |
469
470**返回值:**
471    | 类型 | 说明 |
472  | -------- | -------- |
473  | boolean | 写入返回成功,否则返回false。 |
474
475**示例:**
476
477  ```
478  let data = rpc.MessageParcel.create();
479  let result = data.writeByte(2);
480  console.log("RpcClient: writeByte is: " + result);
481  ```
482
483
484### readByte
485
486readByte(): number
487
488从MessageParcel实例读取字节值。
489
490**系统能力**:SystemCapability.Communication.IPC.Core
491
492**返回值:**
493    | 类型 | 说明 |
494  | -------- | -------- |
495  | number | 返回字节值。 |
496
497**示例:**
498
499  ```
500  let data = rpc.MessageParcel.create();
501  let result = data.writeByte(2);
502  console.log("RpcClient: writeByte is: " + result);
503  let ret = data.readByte();
504  console.log("RpcClient: readByte is: " + ret);
505  ```
506
507
508### writeShort
509
510writeShort(val: number): boolean
511
512将短整数值写入MessageParcel实例。
513
514**系统能力**:SystemCapability.Communication.IPC.Core
515
516**参数:**
517    | 参数名 | 类型 | 必填 | 说明 |
518  | -------- | -------- | -------- | -------- |
519  | val | number | 是 | 要写入的短整数值。 |
520
521**返回值:**
522    | 类型 | 说明 |
523  | -------- | -------- |
524  | boolean | 写入返回true,否则返回false。 |
525
526**示例:**
527
528  ```
529  let data = rpc.MessageParcel.create();
530  let result = data.writeShort(8);
531  console.log("RpcClient: writeShort is: " + result);
532  ```
533
534
535### readShort
536
537readShort(): number
538
539从MessageParcel实例读取短整数值。
540
541**系统能力**:SystemCapability.Communication.IPC.Core
542
543**返回值:**
544    | 类型 | 说明 |
545  | -------- | -------- |
546  | number | 返回短整数值。 |
547
548**示例:**
549
550  ```
551  let data = rpc.MessageParcel.create();
552  let result = data.writeShort(8);
553  console.log("RpcClient: writeShort is: " + result);
554  let ret = data.readShort();
555  console.log("RpcClient: readShort is: " + ret);
556  ```
557
558
559### writeInt
560
561writeInt(val: number): boolean
562
563将整数值写入MessageParcel实例。
564
565**系统能力**:SystemCapability.Communication.IPC.Core
566
567**参数:**
568    | 参数名 | 类型 | 必填 | 说明 |
569  | -------- | -------- | -------- | -------- |
570  | val | number | 是 | 要写入的整数值。 |
571
572**返回值:**
573    | 类型 | 说明 |
574  | -------- | -------- |
575  | boolean | 写入返回成功,否则返回false。 |
576
577**示例:**
578
579  ```
580  let data = rpc.MessageParcel.create();
581  let result = data.writeInt(10);
582  console.log("RpcClient: writeInt is " + result);
583  ```
584
585
586### readInt
587
588readInt(): number
589
590从MessageParcel实例读取整数值。
591
592**系统能力**:SystemCapability.Communication.IPC.Core
593
594**返回值:**
595    | 类型 | 说明 |
596  | -------- | -------- |
597  | number | 返回整数值。 |
598
599**示例:**
600
601  ```
602  let data = rpc.MessageParcel.create();
603  let result = data.writeInt(10);
604  console.log("RpcClient: writeInt is " + result);
605  let ret = data.readInt();
606  console.log("RpcClient: readInt is " + ret);
607  ```
608
609
610### writeLong
611
612writeLong(val: number): boolean
613
614将长整数值写入MessageParcel实例。
615
616**系统能力**:SystemCapability.Communication.IPC.Core
617
618**参数:**
619    | 参数名 | 类型 | 必填 | 说明 |
620  | -------- | -------- | -------- | -------- |
621  | val | number | 是 | 要写入的长整数值 |
622
623**返回值:**
624    | 类型 | 说明 |
625  | -------- | -------- |
626  | boolean | 写入成功返回true,否则返回false。 |
627
628**示例:**
629
630  ```
631  let data = rpc.MessageParcel.create();
632  let result = data.writeLong(10000);
633  console.log("RpcClient: writeLong is " + result);
634  ```
635
636
637### readLong
638
639readLong(): number
640
641从MessageParcel实例中读取长整数值。
642
643**系统能力**:SystemCapability.Communication.IPC.Core
644
645**返回值:**
646    | 类型 | 说明 |
647  | -------- | -------- |
648  | number | 返回长整数值。 |
649
650**示例:**
651
652  ```
653  let data = rpc.MessageParcel.create();
654  let result = data.writeLong(10000);
655  console.log("RpcClient: writeLong is " + result);
656  let ret = data.readLong();
657  console.log("RpcClient: readLong is " + ret);
658  ```
659
660
661### writeFloat
662
663writeFloat(val: number): boolean
664
665将浮点值写入MessageParcel实例。
666
667**系统能力**:SystemCapability.Communication.IPC.Core
668
669**参数:**
670    | 参数名 | 类型 | 必填 | 说明 |
671  | -------- | -------- | -------- | -------- |
672  | val | number | 是 | 要写入的浮点值。 |
673
674**返回值:**
675    | 类型 | 说明 |
676  | -------- | -------- |
677  | boolean | 写入成功返回true,否则返回false。 |
678
679**示例:**
680
681  ```
682  let data = rpc.MessageParcel.create();
683  let result = data.writeFloat(1.2);
684  console.log("RpcClient: writeFloat is " + result);
685  ```
686
687
688### readFloat
689
690readFloat(): number
691
692从MessageParcel实例中读取浮点值。
693
694**系统能力**:SystemCapability.Communication.IPC.Core
695
696**返回值:**
697    | 类型 | 说明 |
698  | -------- | -------- |
699  | number | 返回浮点值。 |
700
701**示例:**
702
703  ```
704  let data = rpc.MessageParcel.create();
705  let result = data.writeFloat(1.2);
706  console.log("RpcClient: writeFloat is " + result);
707  let ret = data.readFloat();
708  console.log("RpcClient: readFloat is " + ret);
709  ```
710
711
712### writeDouble
713
714writeDouble(val: number): boolean
715
716将双精度浮点值写入MessageParcel实例。
717
718**系统能力**:SystemCapability.Communication.IPC.Core
719
720**参数:**
721    | 参数名 | 类型 | 必填 | 说明 |
722  | -------- | -------- | -------- | -------- |
723  | val | number | 是 | 要写入的双精度浮点值。 |
724
725**返回值:**
726    | 类型 | 说明 |
727  | -------- | -------- |
728  | boolean | 写入成功返回true,否则返回false。 |
729
730**示例:**
731
732  ```
733  let data = rpc.MessageParcel.create();
734  let result = data.writeDouble(10.2);
735  console.log("RpcClient: writeDouble is " + result);
736  ```
737
738
739### readDouble
740
741readDouble(): number
742
743从MessageParcel实例读取双精度浮点值。
744
745**系统能力**:SystemCapability.Communication.IPC.Core
746
747**返回值:**
748    | 类型 | 说明 |
749  | -------- | -------- |
750  | number | 返回双精度浮点值。 |
751
752**示例:**
753
754  ```
755  let data = rpc.MessageParcel.create();
756  let result = data.writeDouble(10.2);
757  console.log("RpcClient: writeDouble is " + result);
758  let ret = data.readDouble();
759  console.log("RpcClient: readDouble is " + ret);
760  ```
761
762
763### writeBoolean
764
765writeBoolean(val: boolean): boolean
766
767将布尔值写入MessageParcel实例。
768
769**系统能力**:SystemCapability.Communication.IPC.Core
770
771**参数:**
772    | 参数名 | 类型 | 必填 | 说明 |
773  | -------- | -------- | -------- | -------- |
774  | val | boolean | 是 | 要写入的布尔值。 |
775
776**返回值:**
777    | 类型 | 说明 |
778  | -------- | -------- |
779  | boolean | 写入成功返回true,否则返回false。 |
780
781**示例:**
782
783  ```
784  let data = rpc.MessageParcel.create();
785  let result = data.writeBoolean(false);
786  console.log("RpcClient: writeBoolean is " + result);
787  ```
788
789
790### readBoolean
791
792readBoolean(): boolean
793
794从MessageParcel实例读取布尔值。
795
796**系统能力**:SystemCapability.Communication.IPC.Core
797
798**返回值:**
799    | 类型 | 说明 |
800  | -------- | -------- |
801  | boolean | 返回读取到的布尔值。 |
802
803**示例:**
804
805  ```
806  let data = rpc.MessageParcel.create();
807  let result = data.writeBoolean(false);
808  console.log("RpcClient: writeBoolean is " + result);
809  let ret = data.readBoolean();
810  console.log("RpcClient: readBoolean is " + ret);
811  ```
812
813
814### writeChar
815
816writeChar(val: number): boolean
817
818将单个字符值写入MessageParcel实例。
819
820**系统能力**:SystemCapability.Communication.IPC.Core
821
822**参数:**
823    | 参数名 | 类型 | 必填 | 说明 |
824  | -------- | -------- | -------- | -------- |
825  | val | number | 是 | 要写入的单个字符值。 |
826
827**返回值:**
828    | 类型 | 说明 |
829  | -------- | -------- |
830  | boolean | 写入返回true,否则返回false。 |
831
832**示例:**
833
834  ```
835  let data = rpc.MessageParcel.create();
836  let result = data.writeChar(97);
837  console.log("RpcClient: writeChar is " + result);
838  ```
839
840
841### readChar
842
843readChar(): number
844
845从MessageParcel实例中读取单个字符值。
846
847**系统能力**:SystemCapability.Communication.IPC.Core
848
849**返回值:**
850    | 类型 | 说明 |
851  | -------- | -------- |
852  | number | 返回单个字符值。 |
853
854**示例:**
855
856  ```
857  let data = rpc.MessageParcel.create();
858  let result = data.writeChar(97);
859  console.log("RpcClient: writeChar is " + result);
860  let ret = data.readChar();
861  console.log("RpcClient: readChar is " + ret);
862  ```
863
864
865### writeString
866
867writeString(val: string): boolean
868
869将字符串值写入MessageParcel实例。
870
871**系统能力**:SystemCapability.Communication.IPC.Core
872
873**参数:**
874    | 参数名 | 类型 | 必填 | 说明 |
875  | -------- | -------- | -------- | -------- |
876  | val | string | 是 | 要写入的字符串值,其长度应小于40960字节。 |
877
878**返回值:**
879    | 类型 | 说明 |
880  | -------- | -------- |
881  | boolean | 写入成功返回true,否则返回false。 |
882
883**示例:**
884
885  ```
886  let data = rpc.MessageParcel.create();
887  let result = data.writeString('abc');
888  console.log("RpcClient: writeString  is " + result);
889  ```
890
891
892### readString
893
894readString(): string
895
896从MessageParcel实例读取字符串值。
897
898**系统能力**:SystemCapability.Communication.IPC.Core
899
900**返回值:**
901    | 类型 | 说明 |
902  | -------- | -------- |
903  | string | 返回字符串值。 |
904
905**示例:**
906
907  ```
908  let data = rpc.MessageParcel.create();
909  let result = data.writeString('abc');
910  console.log("RpcClient: writeString  is " + result);
911  let ret = data.readString();
912  console.log("RpcClient: readString is " + ret);
913  ```
914
915
916### writeSequenceable
917
918writeSequenceable(val: Sequenceable): boolean
919
920将自定义序列化对象写入MessageParcel实例。
921
922**系统能力**:SystemCapability.Communication.IPC.Core
923
924**参数:**
925    | 参数名 | 类型 | 必填 | 说明 |
926  | -------- | -------- | -------- | -------- |
927  | val | [Sequenceable](#sequenceable) | 是 | 要写入的可序列对象。 |
928
929**返回值:**
930    | 类型 | 说明 |
931  | -------- | -------- |
932  | boolean | 写入成功返回true,否则返回false。 |
933
934**示例:**
935
936  ```
937  class MySequenceable {
938      num: number;
939      str: string;
940      constructor(num, str) {
941          this.num = num;
942          this.str = str;
943      }
944      marshalling(messageParcel) {
945          messageParcel.writeInt(this.num);
946          messageParcel.writeString(this.str);
947          return true;
948      }
949      unmarshalling(messageParcel) {
950          this.num = messageParcel.readInt();
951          this.str = messageParcel.readString();
952          return true;
953      }
954  }
955  let sequenceable = new MySequenceable(1, "aaa");
956  let data = rpc.MessageParcel.create();
957  let result = data.writeSequenceable(sequenceable);
958  console.log("RpcClient: writeSequenceable is " + result);
959  ```
960
961
962### readSequenceable
963
964readSequenceable(dataIn: Sequenceable) : boolean
965
966从MessageParcel实例中读取成员变量到指定的对象(dataIn)。
967
968**系统能力**:SystemCapability.Communication.IPC.Core
969
970**参数:**
971    | 参数名 | 类型 | 必填 | 说明 |
972  | -------- | -------- | -------- | -------- |
973  | dataIn | [Sequenceable](#sequenceable) | 是 | 需要从MessageParcel读取成员变量的对象。 |
974
975**返回值:**
976    | 类型 | 说明 |
977  | -------- | -------- |
978  | boolean | 如果反序列成功,则返回true;否则返回false。 |
979
980**示例:**
981
982  ```
983  class MySequenceable {
984      num: number;
985      str: string;
986      constructor(num, str) {
987          this.num = num;
988          this.str = str;
989      }
990      marshalling(messageParcel) {
991          messageParcel.writeInt(this.num);
992          messageParcel.writeString(this.str);
993          return true;
994      }
995      unmarshalling(messageParcel) {
996          this.num = messageParcel.readInt();
997          this.str = messageParcel.readString();
998          return true;
999      }
1000  }
1001  let sequenceable = new MySequenceable(1, "aaa");
1002  let data = rpc.MessageParcel.create();
1003  let result = data.writeSequenceable(sequenceable);
1004  console.log("RpcClient: writeSequenceable is " + result);
1005  let ret = new MySequenceable(0, "");
1006  let result2 = data.readSequenceable(ret);
1007  console.log("RpcClient: writeSequenceable is " + result2);
1008  ```
1009
1010
1011### writeByteArray
1012
1013writeByteArray(byteArray: number[]): boolean
1014
1015将字节数组写入MessageParcel实例。
1016
1017**系统能力**:SystemCapability.Communication.IPC.Core
1018
1019**参数:**
1020    | 参数名 | 类型 | 必填 | 说明 |
1021  | -------- | -------- | -------- | -------- |
1022  | byteArray | number[] | 是 | 要写入的字节数组。 |
1023
1024**返回值:**
1025    | 类型 | 说明 |
1026  | -------- | -------- |
1027  | boolean | 写入成功返回true,否则返回false。 |
1028
1029**示例:**
1030
1031  ```
1032  let data = rpc.MessageParcel.create();
1033  let ByteArrayVar = [1, 2, 3, 4, 5];
1034  let result = data.writeByteArray(ByteArrayVar);
1035  console.log("RpcClient: writeByteArray is " + result);
1036  ```
1037
1038
1039### readByteArray
1040
1041readByteArray(dataIn: number[]) : void
1042
1043从MessageParcel实例读取字节数组。
1044
1045**系统能力**:SystemCapability.Communication.IPC.Core
1046
1047**参数:**
1048    | 参数名 | 类型 | 必填 | 说明 |
1049  | -------- | -------- | -------- | -------- |
1050  | dataIn | number[] | 是 | 要读取的字节数组。 |
1051
1052**示例:**
1053
1054  ```
1055  let data = rpc.MessageParcel.create();
1056  let ByteArrayVar = [1, 2, 3, 4, 5];
1057  let result = data.writeByteArray(ByteArrayVar);
1058  console.log("RpcClient: writeByteArray is " + result);
1059  let array = new Array(5);
1060  data.readByteArray(array);
1061  ```
1062
1063
1064### readByteArray
1065
1066readByteArray(): number[]
1067
1068从MessageParcel实例中读取字节数组。
1069
1070**系统能力**:SystemCapability.Communication.IPC.Core
1071
1072**返回值:**
1073    | 类型 | 说明 |
1074  | -------- | -------- |
1075  | number[] | 返回字节数组。 |
1076
1077**示例:**
1078
1079  ```
1080  let data = rpc.MessageParcel.create();
1081  let ByteArrayVar = [1, 2, 3, 4, 5];
1082  let result = data.writeByteArray(ByteArrayVar);
1083  console.log("RpcClient: writeByteArray is " + result);
1084  let array = data.readByteArray();
1085  console.log("RpcClient: readByteArray is " + array);
1086  ```
1087
1088
1089### writeShortArray
1090
1091writeShortArray(shortArray: number[]): boolean
1092
1093将短整数数组写入MessageParcel实例。
1094
1095**系统能力**:SystemCapability.Communication.IPC.Core
1096
1097**参数:**
1098    | 参数名 | 类型 | 必填 | 说明 |
1099  | -------- | -------- | -------- | -------- |
1100  | shortArray | number[] | 是 | 要写入的短整数数组。 |
1101
1102**返回值:**
1103    | 类型 | 说明 |
1104  | -------- | -------- |
1105  | boolean | 写入返回true,否则返回false。 |
1106
1107**示例:**
1108
1109  ```
1110  let data = rpc.MessageParcel.create();
1111  let result = data.writeShortArray([11, 12, 13]);
1112  console.log("RpcClient: writeShortArray is " + result);
1113  ```
1114
1115
1116### readShortArray
1117
1118readShortArray(dataIn: number[]) : void
1119
1120从MessageParcel实例中读取短整数数组。
1121
1122**系统能力**:SystemCapability.Communication.IPC.Core
1123
1124**参数:**
1125    | 参数名 | 类型 | 必填 | 说明 |
1126  | -------- | -------- | -------- | -------- |
1127  | dataIn | number[] | 是 | 要读取的短整数数组。 |
1128
1129**示例:**
1130
1131  ```
1132  let data = rpc.MessageParcel.create();
1133  let result = data.writeShortArray([11, 12, 13]);
1134  console.log("RpcClient: writeShortArray is " + result);
1135  let array = new Array(3);
1136  data.readShortArray(array);
1137  ```
1138
1139
1140### readShortArray
1141
1142readShortArray(): number[]
1143
1144从MessageParcel实例中读取短整数数组。
1145
1146**系统能力**:SystemCapability.Communication.IPC.Core
1147
1148**返回值:**
1149    | 类型 | 说明 |
1150  | -------- | -------- |
1151  | number[] | 返回短整数数组。 |
1152
1153**示例:**
1154
1155  ```
1156  let data = rpc.MessageParcel.create();
1157  let result = data.writeShortArray([11, 12, 13]);
1158  console.log("RpcClient: writeShortArray is " + result);
1159  let array = data.readShortArray();
1160  console.log("RpcClient: readShortArray is " + array);
1161  ```
1162
1163
1164### writeIntArray
1165
1166writeIntArray(intArray: number[]): boolean
1167
1168将整数数组写入MessageParcel实例。
1169
1170**系统能力**:SystemCapability.Communication.IPC.Core
1171
1172**参数:**
1173    | 参数名 | 类型 | 必填 | 说明 |
1174  | -------- | -------- | -------- | -------- |
1175  | intArray | number[] | 是 | 要写入的整数数组。 |
1176
1177**返回值:**
1178    | 类型 | 说明 |
1179  | -------- | -------- |
1180  | boolean | 写入返回true,否则返回false。 |
1181
1182**示例:**
1183
1184  ```
1185  let data = rpc.MessageParcel.create();
1186  let result = data.writeIntArray([100, 111, 112]);
1187  console.log("RpcClient: writeIntArray is " + result);
1188  ```
1189
1190
1191### readIntArray
1192
1193readIntArray(dataIn: number[]) : void
1194
1195从MessageParcel实例中读取整数数组。
1196
1197**系统能力**:SystemCapability.Communication.IPC.Core
1198
1199**参数:**
1200    | 参数名 | 类型 | 必填 | 说明 |
1201  | -------- | -------- | -------- | -------- |
1202  | dataIn | number[] | 是 | 要读取的整数数组。 |
1203
1204**示例:**
1205
1206  ```
1207  let data = rpc.MessageParcel.create();
1208  let result = data.writeIntArray([100, 111, 112]);
1209  console.log("RpcClient: writeIntArray is " + result);
1210  let array = new Array(3);
1211  data.readIntArray(array);
1212  ```
1213
1214
1215### readIntArray
1216
1217readIntArray(): number[]
1218
1219从MessageParcel实例中读取整数数组。
1220
1221**系统能力**:SystemCapability.Communication.IPC.Core
1222
1223**返回值:**
1224    | 类型 | 说明 |
1225  | -------- | -------- |
1226  | number[] | 返回整数数组。 |
1227
1228**示例:**
1229
1230  ```
1231  let data = rpc.MessageParcel.create();
1232  let result = data.writeIntArray([100, 111, 112]);
1233  console.log("RpcClient: writeIntArray is " + result);
1234  let array = data.readIntArray();
1235  console.log("RpcClient: readIntArray is " + array);
1236  ```
1237
1238
1239### writeLongArray
1240
1241writeLongArray(longArray: number[]): boolean
1242
1243将长整数数组写入MessageParcel实例。
1244
1245**系统能力**:SystemCapability.Communication.IPC.Core
1246
1247**参数:**
1248    | 参数名 | 类型 | 必填 | 说明 |
1249  | -------- | -------- | -------- | -------- |
1250  | longArray | number[] | 是 | 要写入的长整数数组。 |
1251
1252**返回值:**
1253    | 类型 | 说明 |
1254  | -------- | -------- |
1255  | boolean | 写入返回true,否则返回false。 |
1256
1257**示例:**
1258
1259  ```
1260  let data = rpc.MessageParcel.create();
1261  let result = data.writeLongArray([1111, 1112, 1113]);
1262  console.log("RpcClient: writeLongArray is " + result);
1263  ```
1264
1265
1266### readLongArray
1267
1268readLongArray(dataIn: number[]) : void
1269
1270从MessageParcel实例读取长整数数组。
1271
1272**系统能力**:SystemCapability.Communication.IPC.Core
1273
1274**参数:**
1275    | 参数名 | 类型 | 必填 | 说明 |
1276  | -------- | -------- | -------- | -------- |
1277  | dataIn | number[] | 是 | 要读取的长整数数组。 |
1278
1279**示例:**
1280
1281  ```
1282  let data = rpc.MessageParcel.create();
1283  let result = data.writeLongArray([1111, 1112, 1113]);
1284  console.log("RpcClient: writeLongArray is " + result);
1285  let array = new Array(3);
1286  data.readLongArray(array);
1287  ```
1288
1289
1290### readLongArray
1291
1292readLongArray(): number[]
1293
1294从MessageParcel实例中读取长整数数组。
1295
1296**系统能力**:SystemCapability.Communication.IPC.Core
1297
1298**返回值:**
1299    | 类型 | 说明 |
1300  | -------- | -------- |
1301  | number[] | 返回长整数数组。 |
1302
1303**示例:**
1304
1305  ```
1306  let data = rpc.MessageParcel.create();
1307  let result = data.writeLongArray([1111, 1112, 1113]);
1308  console.log("RpcClient: writeLongArray is " + result);
1309  let array = data.readLongArray();
1310  console.log("RpcClient: readLongArray is " + array);
1311  ```
1312
1313
1314### writeFloatArray
1315
1316writeFloatArray(floatArray: number[]): boolean
1317
1318将浮点数组写入MessageParcel实例。
1319
1320**系统能力**:SystemCapability.Communication.IPC.Core
1321
1322**参数:**
1323    | 参数名 | 类型 | 必填 | 说明 |
1324  | -------- | -------- | -------- | -------- |
1325  | floatArray | number[] | 是 | 要写入的浮点数组。 |
1326
1327**返回值:**
1328    | 类型 | 说明 |
1329  | -------- | -------- |
1330  | boolean | 写入返回true,否则返回false。 |
1331
1332**示例:**
1333
1334  ```
1335  let data = rpc.MessageParcel.create();
1336  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
1337  console.log("RpcClient: writeFloatArray is " + result);
1338  ```
1339
1340
1341### readFloatArray
1342
1343readFloatArray(dataIn: number[]) : void
1344
1345从MessageParcel实例中读取浮点数组。
1346
1347**系统能力**:SystemCapability.Communication.IPC.Core
1348
1349**参数:**
1350    | 参数名 | 类型 | 必填 | 说明 |
1351  | -------- | -------- | -------- | -------- |
1352  | dataIn | number[] | 是 | 要读取的浮点数组。 |
1353
1354
1355**示例:**
1356
1357  ```
1358  let data = rpc.MessageParcel.create();
1359  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
1360  console.log("RpcClient: writeFloatArray is " + result);
1361  let array = new Array(3);
1362  data.readFloatArray(array);
1363  ```
1364
1365
1366### readFloatArray
1367
1368readFloatArray(): number[]
1369
1370从MessageParcel实例中读取浮点数组。
1371
1372**系统能力**:SystemCapability.Communication.IPC.Core
1373
1374**返回值:**
1375    | 类型 | 说明 |
1376  | -------- | -------- |
1377  | number[] | 返回浮点数组。 |
1378
1379**示例:**
1380
1381  ```
1382  let data = rpc.MessageParcel.create();
1383  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
1384  console.log("RpcClient: writeFloatArray is " + result);
1385  let array = data.readFloatArray();
1386  console.log("RpcClient: readFloatArray is " + array);
1387  ```
1388
1389
1390### writeDoubleArray
1391
1392writeDoubleArray(doubleArray: number[]): boolean
1393
1394将双精度浮点数组写入MessageParcel实例。
1395
1396**系统能力**:SystemCapability.Communication.IPC.Core
1397
1398**参数:**
1399    | 参数名 | 类型 | 必填 | 说明 |
1400  | -------- | -------- | -------- | -------- |
1401  | doubleArray | number[] | 是 | 要写入的双精度浮点数组。 |
1402
1403**返回值:**
1404    | 类型 | 说明 |
1405  | -------- | -------- |
1406  | boolean | 写入返回true,否则返回false。 |
1407
1408**示例:**
1409
1410  ```
1411  let data = rpc.MessageParcel.create();
1412  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
1413  console.log("RpcClient: writeDoubleArray is " + result);
1414  ```
1415
1416
1417### readDoubleArray
1418
1419readDoubleArray(dataIn: number[]) : void
1420
1421从MessageParcel实例中读取双精度浮点数组。
1422
1423**系统能力**:SystemCapability.Communication.IPC.Core
1424
1425**参数:**
1426    | 参数名 | 类型 | 必填 | 说明 |
1427  | -------- | -------- | -------- | -------- |
1428  | dataIn | number[] | 是 | 要读取的双精度浮点数组。 |
1429
1430**示例:**
1431
1432  ```
1433  let data = rpc.MessageParcel.create();
1434  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
1435  console.log("RpcClient: writeDoubleArray is " + result);
1436  let array = new Array(3);
1437  data.readDoubleArray(array);
1438  ```
1439
1440
1441### readDoubleArray
1442
1443readDoubleArray(): number[]
1444
1445从MessageParcel实例读取双精度浮点数组。
1446
1447**系统能力**:SystemCapability.Communication.IPC.Core
1448
1449**返回值:**
1450    | 类型 | 说明 |
1451  | -------- | -------- |
1452  | number[] | 返回双精度浮点数组。 |
1453
1454**示例:**
1455
1456  ```
1457  let data = rpc.MessageParcel.create();
1458  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
1459  console.log("RpcClient: writeDoubleArray is " + result);
1460  let array = data.readDoubleArray();
1461  console.log("RpcClient: readDoubleArray is " + array);
1462  ```
1463
1464
1465### writeBooleanArray
1466
1467writeBooleanArray(booleanArray: boolean[]): boolean
1468
1469将布尔数组写入MessageParcel实例。
1470
1471**系统能力**:SystemCapability.Communication.IPC.Core
1472
1473**参数:**
1474    | 参数名 | 类型 | 必填 | 说明 |
1475  | -------- | -------- | -------- | -------- |
1476  | booleanArray | boolean[] | 是 | 要写入的布尔数组。 |
1477
1478**返回值:**
1479    | 类型 | 说明 |
1480  | -------- | -------- |
1481  | boolean | 写入成功返回true,否则返回false。 |
1482
1483**示例:**
1484
1485  ```
1486  let data = rpc.MessageParcel.create();
1487  let result = data.writeBooleanArray([false, true, false]);
1488  console.log("RpcClient: writeBooleanArray is " + result);
1489  ```
1490
1491
1492### readBooleanArray
1493
1494readBooleanArray(dataIn: boolean[]) : void
1495
1496从MessageParcel实例中读取布尔数组。
1497
1498**系统能力**:SystemCapability.Communication.IPC.Core
1499
1500**参数:**
1501    | 参数名 | 类型 | 必填 | 说明 |
1502  | -------- | -------- | -------- | -------- |
1503  | dataIn | boolean[] | 是 | 要读取的布尔数组。 |
1504
1505**示例:**
1506
1507  ```
1508  let data = rpc.MessageParcel.create();
1509  let result = data.writeBooleanArray([false, true, false]);
1510  console.log("RpcClient: writeBooleanArray is " + result);
1511  let array = new Array(3);
1512  data.readBooleanArray(array);
1513  ```
1514
1515
1516### readBooleanArray
1517
1518readBooleanArray(): boolean[]
1519
1520从MessageParcel实例中读取布尔数组。
1521
1522**系统能力**:SystemCapability.Communication.IPC.Core
1523
1524**返回值:**
1525    | 类型 | 说明 |
1526  | -------- | -------- |
1527  | boolean[] | 返回布尔数组。 |
1528
1529
1530  ```
1531  let data = rpc.MessageParcel.create();
1532  let result = data.writeBooleanArray([false, true, false]);
1533  console.log("RpcClient: writeBooleanArray is " + result);
1534  let array = data.readBooleanArray();
1535  console.log("RpcClient: readBooleanArray is " + array);
1536  ```
1537
1538
1539### writeCharArray
1540
1541writeCharArray(charArray: number[]): boolean
1542
1543将单个字符数组写入MessageParcel实例。
1544
1545**系统能力**:SystemCapability.Communication.IPC.Core
1546
1547**参数:**
1548    | 参数名 | 类型 | 必填 | 说明 |
1549  | -------- | -------- | -------- | -------- |
1550  | charArray | number[] | 是 | 要写入的单个字符数组。 |
1551
1552**返回值:**
1553    | 类型 | 说明 |
1554  | -------- | -------- |
1555  | boolean | 写入成功返回true,否则返回false。 |
1556
1557**示例:**
1558
1559  ```
1560  let data = rpc.MessageParcel.create();
1561  let result = data.writeCharArray([97, 98, 88]);
1562  console.log("RpcClient: writeCharArray is " + result);
1563  ```
1564
1565
1566### readCharArray
1567
1568readCharArray(dataIn: number[]) : void
1569
1570从MessageParcel实例中读取单个字符数组。
1571
1572**系统能力**:SystemCapability.Communication.IPC.Core
1573
1574**参数:**
1575    | 参数名 | 类型 | 必填 | 说明 |
1576  | -------- | -------- | -------- | -------- |
1577  | dataIn | number[] | 是 | 要读取的单个字符数组。 |
1578
1579**示例:**
1580
1581  ```
1582  let data = rpc.MessageParcel.create();
1583  let result = data.writeCharArray([97, 98, 99]);
1584  console.log("RpcClient: writeCharArray is " + result);
1585  let array = new Array(3);
1586  data.readCharArray(array);
1587  ```
1588
1589
1590### readCharArray
1591
1592readCharArray(): number[]
1593
1594从MessageParcel实例读取单个字符数组。
1595
1596**系统能力**:SystemCapability.Communication.IPC.Core
1597
1598**返回值:**
1599    | 类型 | 说明 |
1600  | -------- | -------- |
1601  | number[] | 返回单个字符数组。 |
1602
1603**示例:**
1604
1605  ```
1606  let data = rpc.MessageParcel.create();
1607  let result = data.writeCharArray([97, 98, 99]);
1608  console.log("RpcClient: writeCharArray is " + result);
1609  let array = data.readCharArray();
1610  console.log("RpcClient: readCharArray is " + array);
1611  ```
1612
1613
1614### writeStringArray
1615
1616writeStringArray(stringArray: string[]): boolean
1617
1618将字符串数组写入MessageParcel实例。
1619
1620**系统能力**:SystemCapability.Communication.IPC.Core
1621
1622**参数:**
1623    | 参数名 | 类型 | 必填 | 说明 |
1624  | -------- | -------- | -------- | -------- |
1625  | stringArray | string[] | 是 | 要写入的字符串数组,数组单个元素的长度应小于40960字节。 |
1626
1627**返回值:**
1628    | 类型 | 说明 |
1629  | -------- | -------- |
1630  | boolean | 写入成功返回true,否则返回false。 |
1631
1632**示例:**
1633
1634  ```
1635  let data = rpc.MessageParcel.create();
1636  let result = data.writeStringArray(["abc", "def"]);
1637  console.log("RpcClient: writeStringArray is " + result);
1638  ```
1639
1640
1641### readStringArray
1642
1643readStringArray(dataIn: string[]) : void
1644
1645从MessageParcel实例读取字符串数组。
1646
1647**系统能力**:SystemCapability.Communication.IPC.Core
1648
1649**参数:**
1650    | 参数名 | 类型 | 必填 | 说明 |
1651  | -------- | -------- | -------- | -------- |
1652  | dataIn | string[] | 是 | 要读取的字符串数组。 |
1653
1654**示例:**
1655
1656  ```
1657  let data = rpc.MessageParcel.create();
1658  let result = data.writeStringArray(["abc", "def"]);
1659  console.log("RpcClient: writeStringArray is " + result);
1660  let array = new Array(2);
1661  data.readStringArray(array);
1662  ```
1663
1664
1665### readStringArray
1666
1667readStringArray(): string[]
1668
1669从MessageParcel实例读取字符串数组。
1670
1671**系统能力**:SystemCapability.Communication.IPC.Core
1672
1673**返回值:**
1674    | 类型 | 说明 |
1675  | -------- | -------- |
1676  | string[] | 返回字符串数组。 |
1677
1678**示例:**
1679
1680  ```
1681  let data = rpc.MessageParcel.create();
1682  let result = data.writeStringArray(["abc", "def"]);
1683  console.log("RpcClient: writeStringArray is " + result);
1684  let array = data.readStringArray();
1685  console.log("RpcClient: readStringArray is " + array);
1686  ```
1687
1688
1689### writeNoException<sup>8+</sup>
1690
1691writeNoException(): void
1692
1693向MessageParcel写入“指示未发生异常”的信息。
1694
1695**系统能力**:SystemCapability.Communication.IPC.Core
1696
1697**示例:**
1698
1699  ```
1700  class MyDeathRecipient {
1701      onRemoteDied() {
1702          console.log("server died");
1703      }
1704  }
1705  class TestRemoteObject extends rpc.RemoteObject {
1706      constructor(descriptor) {
1707          super(descriptor);
1708      }
1709      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
1710          return true;
1711      }
1712      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
1713          return true;
1714      }
1715      isObjectDead(): boolean {
1716          return false;
1717      }
1718      onRemoteRequest(code, data, reply, option) {
1719          if (code === 1) {
1720              console.log("RpcServer: onRemoteRequest called");
1721              reply.writeNoException();
1722              return true;
1723          } else {
1724              console.log("RpcServer: unknown code: " + code);
1725              return false;
1726          }
1727      }
1728  }
1729  ```
1730
1731
1732### readException<sup>8+</sup>
1733
1734readException(): void
1735
1736从MessageParcel中读取异常。
1737
1738**系统能力**:SystemCapability.Communication.IPC.Core
1739
1740**示例:**
1741
1742  ```
1743  import FA from "@ohos.ability.featureAbility";
1744  let proxy;
1745  let connect = {
1746      onConnect: function(elementName, remoteProxy) {
1747          console.log("RpcClient: js onConnect called.");
1748          proxy = remoteProxy;
1749      },
1750      onDisconnect: function(elementName) {
1751          console.log("RpcClient: onDisconnect");
1752      },
1753      onFailed: function() {
1754          console.log("RpcClient: onFailed");
1755      }
1756  };
1757  let want = {
1758      "bundleName": "com.ohos.server",
1759      "abilityName": "com.ohos.server.MainAbility",
1760  };
1761  FA.connectAbility(want, connect);
1762  let option = new rpc.MessageOption();
1763  let data = rpc.MessageParcel.create();
1764  let reply = rpc.MessageParcel.create();
1765  data.writeInt(1);
1766  data.writeString("hello");
1767  proxy.sendRequest(1, data, reply, option)
1768      .then(function(errCode) {
1769          if (errCode === 0) {
1770              console.log("sendRequest got result");
1771              reply.readException();
1772              let msg = reply.readString();
1773              console.log("RPCTest: reply msg: " + msg);
1774          } else {
1775              console.log("RPCTest: sendRequest failed, errCode: " + errCode);
1776          }
1777      }).catch(function(e) {
1778          console.log("RPCTest: sendRequest got exception: " + e.message);
1779      }).finally (() => {
1780          console.log("RPCTest: sendRequest ends, reclaim parcel");
1781          data.reclaim();
1782          reply.reclaim();
1783      });
1784  ```
1785
1786
1787### writeSequenceableArray
1788
1789writeSequenceableArray(sequenceableArray: Sequenceable[]): boolean
1790
1791将可序列化对象数组写入MessageParcel实例。
1792
1793**系统能力**:SystemCapability.Communication.IPC.Core
1794
1795**参数:**
1796    | 参数名 | 类型 | 必填 | 说明 |
1797  | -------- | -------- | -------- | -------- |
1798  | sequenceableArray | Sequenceable[] | 是 | 要写入的可序列化对象数组。 |
1799
1800**返回值:**
1801    | 类型 | 说明 |
1802  | -------- | -------- |
1803  | boolean | 写入成功返回true,否则返回false。 |
1804
1805**示例:**
1806
1807  ```
1808  class MySequenceable {
1809      num: number;
1810      str: string;
1811      constructor(num, str) {
1812          this.num = num;
1813          this.str = str;
1814      }
1815      marshalling(messageParcel) {
1816          messageParcel.writeInt(this.num);
1817          messageParcel.writeString(this.str);
1818          return true;
1819      }
1820      unmarshalling(messageParcel) {
1821          this.num = messageParcel.readInt();
1822          this.str = messageParcel.readString();
1823          return true;
1824      }
1825  }
1826  let sequenceable = new MySequenceable(1, "aaa");
1827  let sequenceable2 = new MySequenceable(2, "bbb");
1828  let sequenceable3 = new MySequenceable(3, "ccc");
1829  let a = [sequenceable, sequenceable2, sequenceable3];
1830  let data = rpc.MessageParcel.create();
1831  let result = data.writeSequenceableArray(a);
1832  console.log("RpcClient: writeSequenceableArray is " + result);
1833  ```
1834
1835
1836### readSequenceableArray<sup>8+</sup>
1837
1838readSequenceableArray(sequenceableArray: Sequenceable[]): void
1839
1840从MessageParcel实例读取可序列化对象数组。
1841
1842**系统能力**:SystemCapability.Communication.IPC.Core
1843
1844**参数:**
1845    | 参数名 | 类型 | 必填 | 说明 |
1846  | -------- | -------- | -------- | -------- |
1847  | sequenceableArray | Sequenceable[] | 是 | 要读取的可序列化对象数组。 |
1848
1849**示例:**
1850
1851  ```
1852  class MySequenceable {
1853      num: number;
1854      str: string;
1855      constructor(num, str) {
1856          this.num = num;
1857          this.str = str;
1858      }
1859      marshalling(messageParcel) {
1860          messageParcel.writeInt(this.num);
1861          messageParcel.writeString(this.str);
1862          return true;
1863      }
1864      unmarshalling(messageParcel) {
1865          this.num = messageParcel.readInt();
1866          this.str = messageParcel.readString();
1867          return true;
1868      }
1869  }
1870  let sequenceable = new MySequenceable(1, "aaa");
1871  let sequenceable2 = new MySequenceable(2, "bbb");
1872  let sequenceable3 = new MySequenceable(3, "ccc");
1873  let a = [sequenceable, sequenceable2, sequenceable3];
1874  let data = rpc.MessageParcel.create();
1875  let result = data.writeSequenceableArray(a);
1876  console.log("RpcClient: writeSequenceableArray is " + result);
1877  let b = [new MySequenceable(0, ""), new MySequenceable(0, ""), new MySequenceable(0, "")];
1878  data.readSequenceableArray(b);
1879  ```
1880
1881
1882### writeRemoteObjectArray<sup>8+</sup>
1883
1884writeRemoteObjectArray(objectArray: IRemoteObject[]): boolean
1885
1886将IRemoteObject对象数组写入MessageParcel。
1887
1888**系统能力**:SystemCapability.Communication.IPC.Core
1889
1890**参数:**
1891    | 参数名 | 类型 | 必填 | 说明 |
1892  | -------- | -------- | -------- | -------- |
1893  | objectArray | IRemoteObject[] | 是 | 要写入MessageParcel的IRemoteObject对象数组。 |
1894
1895**返回值:**
1896    | 类型 | 说明 |
1897  | -------- | -------- |
1898  | boolean | 如果IRemoteObject对象数组成功写入MessageParcel,则返回true;如果对象为null或数组写入MessageParcel失败,则返回false。 |
1899
1900**示例:**
1901
1902  ```
1903  class MyDeathRecipient {
1904      onRemoteDied() {
1905          console.log("server died");
1906      }
1907  }
1908  class TestRemoteObject extends rpc.RemoteObject {
1909      constructor(descriptor) {
1910          super(descriptor);
1911          this.attachLocalInterface(this, descriptor);
1912      }
1913      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
1914          return true;
1915      }
1916      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
1917          return true;
1918      }
1919      isObjectDead(): boolean {
1920          return false;
1921      }
1922      asObject(): rpc.IRemoteObject {
1923          return this;
1924      }
1925  }
1926  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
1927  let data = rpc.MessageParcel.create();
1928  let result = data.writeRemoteObjectArray(a);
1929  console.log("RpcClient: writeRemoteObjectArray is " + result);
1930  ```
1931
1932
1933### readRemoteObjectArray<sup>8+</sup>
1934
1935readRemoteObjectArray(objects: IRemoteObject[]): void
1936
1937从MessageParcel读取IRemoteObject对象数组。
1938
1939**系统能力**:SystemCapability.Communication.IPC.Core
1940
1941**参数:**
1942    | 参数名 | 类型 | 必填 | 说明 |
1943  | -------- | -------- | -------- | -------- |
1944  | objects | IRemoteObject[] | 是 | 从MessageParcel读取的IRemoteObject对象数组。 |
1945
1946**示例:**
1947
1948  ```
1949  class MyDeathRecipient {
1950      onRemoteDied() {
1951          console.log("server died");
1952      }
1953  }
1954  class TestRemoteObject extends rpc.RemoteObject {
1955      constructor(descriptor) {
1956          super(descriptor);
1957          this.attachLocalInterface(this, descriptor);
1958      }
1959      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
1960          return true;
1961      }
1962      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
1963          return true;
1964      }
1965      isObjectDead(): boolean {
1966          return false;
1967      }
1968      asObject(): rpc.IRemoteObject {
1969          return this;
1970      }
1971  }
1972  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
1973  let data = rpc.MessageParcel.create();
1974  let result = data.writeRemoteObjectArray(a);
1975  let b = new Array(3);
1976  data.readRemoteObjectArray(b);
1977  ```
1978
1979
1980### readRemoteObjectArray<sup>8+</sup>
1981
1982readRemoteObjectArray(): IRemoteObject[]
1983
1984从MessageParcel读取IRemoteObject对象数组。
1985
1986**系统能力**:SystemCapability.Communication.IPC.Core
1987
1988**返回值:**
1989    | 类型 | 说明 |
1990  | -------- | -------- |
1991  | IRemoteObject[] | 返回IRemoteObject对象数组。 |
1992
1993**示例:**
1994
1995  ```
1996  class MyDeathRecipient {
1997      onRemoteDied() {
1998          console.log("server died");
1999      }
2000  }
2001  class TestRemoteObject extends rpc.RemoteObject {
2002      constructor(descriptor) {
2003          super(descriptor);
2004          this.attachLocalInterface(this, descriptor);
2005      }
2006      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
2007          return true;
2008      }
2009      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
2010          return true;
2011      }
2012      isObjectDead(): boolean {
2013          return false;
2014      }
2015      asObject(): rpc.IRemoteObject {
2016          return this;
2017      }
2018  }
2019  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
2020  let data = rpc.MessageParcel.create();
2021  let result = data.writeRemoteObjectArray(a);
2022  console.log("RpcClient: readRemoteObjectArray is " + result);
2023  let b = data.readRemoteObjectArray();
2024  console.log("RpcClient: readRemoteObjectArray is " + b);
2025  ```
2026
2027
2028### closeFileDescriptor<sup>8+</sup>
2029
2030static closeFileDescriptor(fd: number): void
2031
2032关闭给定的文件描述符。
2033
2034**系统能力**:SystemCapability.Communication.IPC.Core
2035
2036**参数:**
2037    | 参数名 | 类型 | 必填 | 说明 |
2038  | -------- | -------- | -------- | -------- |
2039  | fd | number | 是 | 要关闭的文件描述符。 |
2040
2041**示例:**
2042
2043  ```
2044  import fileio from '@ohos.fileio';
2045  let filePath = "path/to/file";
2046  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2047  rpc.MessageParcel.closeFileDescriptor(fd);
2048  ```
2049
2050
2051### dupFileDescriptor<sup>8+</sup>
2052
2053static dupFileDescriptor(fd: number) :number
2054
2055复制给定的文件描述符。
2056
2057**系统能力**:SystemCapability.Communication.IPC.Core
2058
2059**参数:**
2060    | 参数名 | 类型 | 必填 | 说明 |
2061  | -------- | -------- | -------- | -------- |
2062  | fd | number | 是 | 表示已存在的文件描述符。 |
2063
2064**返回值:**
2065    | 类型 | 说明 |
2066  | -------- | -------- |
2067  | number | 返回新的文件描述符。 |
2068
2069**示例:**
2070
2071  ```
2072  import fileio from '@ohos.fileio';
2073  let filePath = "path/to/file";
2074  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2075  let newFd = rpc.MessageParcel.dupFileDescriptor(fd);
2076  ```
2077
2078
2079### containFileDescriptors<sup>8+</sup>
2080
2081containFileDescriptors(): boolean
2082
2083检查此MessageParcel对象是否包含文件描述符。
2084
2085**系统能力**:SystemCapability.Communication.IPC.Core
2086
2087**返回值:**
2088    | 类型 | 说明 |
2089  | -------- | -------- |
2090  | boolean | 如果此MessageParcel对象包含文件描述符,则返回true;否则返回false。 |
2091
2092**示例:**
2093
2094  ```
2095  import fileio from '@ohos.fileio';
2096  let parcel = new rpc.MessageParcel();
2097  let filePath = "path/to/file";
2098  let r1 = parcel.containFileDescriptors();
2099  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2100  let writeResult = parcel.writeFileDescriptor(fd);
2101  console.log("RpcTest: parcel writeFd result is : " + writeResult);
2102  let containFD = parcel.containFileDescriptors();
2103  console.log("RpcTest: parcel after write fd containFd result is : " + containFD);
2104  ```
2105
2106
2107### writeFileDescriptor<sup>8+</sup>
2108
2109writeFileDescriptor(fd: number): boolean
2110
2111写入文件描述符到MessageParcel。
2112
2113**系统能力**:SystemCapability.Communication.IPC.Core
2114
2115**参数:**
2116    | 参数名 | 类型 | 必填 | 说明 |
2117  | -------- | -------- | -------- | -------- |
2118  | fd | number | 是 | 文件描述符。 |
2119
2120**返回值:**
2121    | 类型 | 说明 |
2122  | -------- | -------- |
2123  | boolean | 如果操作成功,则返回true;否则返回false。 |
2124
2125**示例:**
2126
2127  ```
2128  import fileio from '@ohos.fileio';
2129  let parcel = new rpc.MessageParcel();
2130  let filePath = "path/to/file";
2131  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2132  let writeResult = parcel.writeFileDescriptor(fd);
2133  console.log("RpcTest: parcel writeFd result is : " + writeResult);
2134  ```
2135
2136
2137### readFileDescriptor<sup>8+</sup>
2138
2139readFileDescriptor(): number
2140
2141从MessageParcel中读取文件描述符。
2142
2143**系统能力**:SystemCapability.Communication.IPC.Core
2144
2145**返回值:**
2146    | 类型 | 说明 |
2147  | -------- | -------- |
2148  | number | 返回文件描述符。 |
2149
2150**示例:**
2151
2152  ```
2153  import fileio from '@ohos.fileio';
2154  let parcel = new rpc.MessageParcel();
2155  let filePath = "path/to/file";
2156  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
2157  let writeResult = parcel.writeFileDescriptor(fd);
2158  let readFD = parcel.readFileDescriptor();
2159  console.log("RpcTest: parcel read fd is : " + readFD);
2160  ```
2161
2162
2163### writeAshmem<sup>8+</sup>
2164
2165writeAshmem(ashmem: Ashmem): boolean
2166
2167将指定的匿名共享对象写入此MessageParcel。
2168
2169**系统能力**:SystemCapability.Communication.IPC.Core
2170
2171**参数:**
2172    | 参数名 | 类型 | 必填 | 说明 |
2173  | -------- | -------- | -------- | -------- |
2174  | ashmem | Ashmem | 是 | 要写入MessageParcel的匿名共享对象。 |
2175
2176**返回值:**
2177    | 类型 | 说明 |
2178  | -------- | -------- |
2179  | boolean | 如果匿名共享对象成功写入此MessageParcel,则返回true;否则返回false。 |
2180
2181**示例:**
2182
2183  ```
2184  let parcel = new rpc.MessageParcel();
2185  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
2186  let isWriteSuccess = parcel.writeAshmem(ashmem);
2187  console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
2188  ```
2189
2190
2191### readAshmem<sup>8+</sup>
2192
2193readAshmem(): Ashmem
2194
2195从MessageParcel读取匿名共享对象。
2196
2197**系统能力**:SystemCapability.Communication.IPC.Core
2198
2199**返回值:**
2200    | 类型 | 说明 |
2201  | -------- | -------- |
2202  | Ashmem | 返回匿名共享对象。 |
2203
2204**示例:**
2205
2206  ```
2207  let parcel = new rpc.MessageParcel();
2208  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
2209  let isWriteSuccess = parcel.writeAshmem(ashmem);
2210  console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
2211  let readAshmem = parcel.readAshmem();
2212  console.log("RpcTest: read ashmem to result is : " + readAshmem);
2213  ```
2214
2215
2216### getRawDataCapacity<sup>8+</sup>
2217
2218getRawDataCapacity(): number
2219
2220获取MessageParcel可以容纳的最大原始数据量。
2221
2222**系统能力**:SystemCapability.Communication.IPC.Core
2223
2224**返回值:**
2225    | 类型 | 说明 |
2226  | -------- | -------- |
2227  | number | 返回MessageParcel可以容纳的最大原始数据量,即128&nbsp;Mb。 |
2228
2229**示例:**
2230
2231  ```
2232  let parcel = new rpc.MessageParcel();
2233  let result = parcel.getRawDataCapacity();
2234  console.log("RpcTest: parcel get RawDataCapacity result is : " + result);
2235  ```
2236
2237
2238### writeRawData<sup>8+</sup>
2239
2240writeRawData(rawData: number[], size: number): boolean
2241
2242将原始数据写入MessageParcel对象。
2243
2244**系统能力**:SystemCapability.Communication.IPC.Core
2245
2246**参数:**
2247    | 参数名 | 类型 | 必填 | 说明 |
2248  | -------- | -------- | -------- | -------- |
2249  | rawData | number[] | 是 | 要写入的原始数据。 |
2250  | size | number | 是 | 发送的原始数据大小,以字节为单位。 |
2251
2252**返回值:**
2253    | 类型 | 说明 |
2254  | -------- | -------- |
2255  | boolean | 如果操作成功,则返回true;否则返回false。 |
2256
2257**示例:**
2258
2259  ```
2260  let parcel = new rpc.MessageParcel();
2261  let arr = [1, 2, 3, 4, 5];
2262  let isWriteSuccess = parcel.writeRawData(arr, arr.length);
2263  console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
2264  ```
2265
2266
2267### readRawData<sup>8+</sup>
2268
2269readRawData(size: number): number[]
2270
2271从MessageParcel读取原始数据。
2272
2273**系统能力**:SystemCapability.Communication.IPC.Core
2274
2275**参数:**
2276    | 参数名 | 类型 | 必填 | 说明 |
2277  | -------- | -------- | -------- | -------- |
2278  | size | number | 是 | 要读取的原始数据的大小。 |
2279
2280**返回值:**
2281    | 类型 | 说明 |
2282  | -------- | -------- |
2283  | number[] | 返回原始数据(以字节为单位)。 |
2284
2285**示例:**
2286
2287  ```
2288  let parcel = new rpc.MessageParcel();
2289  let arr = [1, 2, 3, 4, 5];
2290  let isWriteSuccess = parcel.writeRawData(arr, arr.length);
2291  console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
2292  let result = parcel.readRawData(5);
2293  console.log("RpcTest: parcel read raw data result is : " + result);
2294  ```
2295
2296## Sequenceable
2297
2298在进程间通信(IPC)期间,将类的对象写入MessageParcel并从MessageParcel中恢复它们。
2299
2300
2301### marshalling
2302
2303marshalling(dataOut: MessageParcel): boolean
2304
2305将此可序列对象封送到MessageParcel中。
2306
2307**系统能力**:SystemCapability.Communication.IPC.Core
2308
2309**参数:**
2310    | 参数名 | 类型 | 必填 | 说明 |
2311  | -------- | -------- | -------- | -------- |
2312  | dataOut | [MessageParcel](#messageparcel) | 是 | 可序列对象将被封送到的MessageParcel对象。 |
2313
2314**返回值:**
2315    | 类型 | 说明 |
2316  | -------- | -------- |
2317  | boolean | 如果封送成功,则返回true;否则返回false。 |
2318
2319**示例:**
2320
2321  ```
2322  class MySequenceable {
2323      num: number;
2324      str: string;
2325      constructor(num, str) {
2326          this.num = num;
2327          this.str = str;
2328      }
2329      marshalling(messageParcel) {
2330          messageParcel.writeInt(this.num);
2331          messageParcel.writeString(this.str);
2332          return true;
2333      }
2334      unmarshalling(messageParcel) {
2335          this.num = messageParcel.readInt();
2336          this.str = messageParcel.readString();
2337          return true;
2338      }
2339  }
2340  let sequenceable = new MySequenceable(1, "aaa");
2341  let data = rpc.MessageParcel.create();
2342  let result = data.writeSequenceable(sequenceable);
2343  console.log("RpcClient: writeSequenceable is " + result);
2344  let ret = new MySequenceable(0, "");
2345  let result2 = data.readSequenceable(ret);
2346  console.log("RpcClient: readSequenceable is " + result2);
2347  ```
2348
2349
2350### unmarshalling
2351
2352unmarshalling(dataIn: MessageParcel) : boolean
2353
2354从MessageParcel中解封此可序列对象。
2355
2356**系统能力**:SystemCapability.Communication.IPC.Core
2357
2358**参数:**
2359    | 参数名 | 类型 | 必填 | 说明 |
2360  | -------- | -------- | -------- | -------- |
2361  | dataIn | [MessageParcel](#messageparcel) | 是 | 已将可序列对象封送到其中的MessageParcel对象。 |
2362
2363**返回值:**
2364    | 类型 | 说明 |
2365  | -------- | -------- |
2366  | boolean | 如果可序列化成功,则返回true;否则返回false。 |
2367
2368**示例:**
2369
2370  ```
2371  class MySequenceable {
2372      num: number;
2373      str: string;
2374      constructor(num, str) {
2375          this.num = num;
2376          this.str = str;
2377      }
2378      marshalling(messageParcel) {
2379          messageParcel.writeInt(this.num);
2380          messageParcel.writeString(this.str);
2381          return true;
2382      }
2383      unmarshalling(messageParcel) {
2384          this.num = messageParcel.readInt();
2385          this.str = messageParcel.readString();
2386          return true;
2387      }
2388  }
2389  let sequenceable = new MySequenceable(1, "aaa");
2390  let data = rpc.MessageParcel.create();
2391  let result = data.writeSequenceable(sequenceable);
2392  console.log("RpcClient: writeSequenceable is " + result);
2393  let ret = new MySequenceable(0, "");
2394  let result2 = data.readSequenceable(ret);
2395  console.log("RpcClient: readSequenceable is " + result2);
2396  ```
2397
2398
2399## IRemoteBroker
2400
2401远端对象的代理持有者。用于获取代理对象。
2402
2403
2404### asObject
2405
2406asObject(): IRemoteObject
2407
2408需派生类实现,获取代理或远端对象。
2409
2410**系统能力**:SystemCapability.Communication.IPC.Core
2411
2412**返回值:**
2413    | 类型 | 说明 |
2414  | -------- | -------- |
2415  | [IRemoteObject](#iremoteobject) | 如果调用者是[RemoteObject](#ashmem8)对象,则直接返回本身;如果调用者是[RemoteProxy](#remoteproxy)对象,则返回它的持有者[IRemoteObject](#iremoteobject)。 |
2416
2417**示例:**
2418
2419  ```
2420  class TestAbility extends rpc.RemoteObject {
2421      asObject() {
2422          return this;
2423      }
2424  }
2425  ```
2426
2427**示例:**
2428
2429  ```
2430  class TestProxy {
2431      remote: rpc.RemoteObject;
2432      constructor(remote) {
2433          this.remote = remote;
2434      }
2435      asObject() {
2436          return this.remote;
2437      }
2438  }
2439  ```
2440
2441
2442## DeathRecipient
2443
2444用于订阅远端对象的死亡通知。当被订阅该通知的远端对象死亡时,本端可收到消息,调用[onRemoteDied](#onremotedied)接口。远端对象死亡可以为远端对象所在进程死亡,远端对象所在设备关机或重启,当远端对象与本端对象属于不同设备时,也可为远端对象离开组网时。
2445
2446
2447### onRemoteDied
2448
2449onRemoteDied(): void
2450
2451在成功添加死亡通知订阅后,当远端对象死亡时,将自动调用本方法。
2452
2453**系统能力**:SystemCapability.Communication.IPC.Core
2454
2455**示例:**
2456
2457  ```
2458  class MyDeathRecipient {
2459      onRemoteDied() {
2460          console.log("server died");
2461      }
2462  }
2463  ```
2464
2465
2466## SendRequestResult<sup>8+</sup>
2467
2468发送请求的响应结果。
2469
2470**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core2471
2472  | 参数 | 值 | 说明 |
2473| -------- | -------- | -------- |
2474| errCode | number | 错误码。 |
2475| code | number | 消息代码。 |
2476| data | MessageParcel | 发送给对端进程的MessageParcel对象。 |
2477| reply | MessageParcel | 对端进程返回的MessageParcel对象。 |
2478
2479
2480## IRemoteObject
2481
2482该接口可用于查询或获取接口描述符、添加或删除死亡通知、转储对象状态到特定文件、发送消息。
2483
2484
2485### queryLocalInterface
2486
2487queryLocalInterface(descriptor: string): IRemoteBroker
2488
2489查询接口。
2490
2491**系统能力**:SystemCapability.Communication.IPC.Core
2492
2493**参数:**
2494    | 参数名 | 类型 | 必填 | 说明 |
2495  | -------- | -------- | -------- | -------- |
2496  | descriptor | string | 是 | 接口描述符的字符串。 |
2497
2498**返回值:**
2499    | 类型 | 说明 |
2500  | -------- | -------- |
2501  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
2502
2503
2504### sendRequest<sup>(deprecated)</sup>
2505
2506> **说明:**
2507> 从 API Version 8 开始废弃,建议使用[sendRequest<sup>8+</sup>](#sendrequest8)替代。
2508
2509sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): boolean
2510
2511以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
2512
2513**系统能力**:SystemCapability.Communication.IPC.Core
2514
2515**参数:**
2516    | 参数名 | 类型 | 必填 | 说明 |
2517  | -------- | -------- | -------- | -------- |
2518  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
2519  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
2520  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
2521  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
2522
2523**返回值:**
2524    | 类型 | 说明 |
2525  | -------- | -------- |
2526  | boolean | 返回一个布尔值,true表示成功,false表示失败。|
2527
2528
2529### sendRequest<sup>8+</sup>
2530
2531sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): Promise&lt;SendRequestResult&gt;
2532
2533以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
2534
2535**系统能力**:SystemCapability.Communication.IPC.Core
2536
2537**参数:**
2538    | 参数名 | 类型 | 必填 | 说明 |
2539  | -------- | -------- | -------- | -------- |
2540  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
2541  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
2542  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
2543  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
2544
2545**返回值:**
2546    | 类型 | 说明 |
2547  | -------- | -------- |
2548  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。|
2549
2550### sendRequest<sup>8+</sup>
2551
2552sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
2553
2554以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
2555
2556**系统能力**:SystemCapability.Communication.IPC.Core
2557
2558**参数:**
2559    | 参数名 | 类型 | 必填 | 说明 |
2560  | -------- | -------- | -------- | -------- |
2561  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
2562  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
2563  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
2564  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
2565  | callback | AsyncCallback&lt;SendRequestResult&gt; | 是 | 接收发送结果的回调。 |
2566
2567
2568### addDeathrecipient
2569
2570addDeathRecipient(recipient: DeathRecipient, flags: number): boolean
2571
2572注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
2573
2574**系统能力**:SystemCapability.Communication.IPC.Core
2575
2576**参数:**
2577    | 参数名 | 类型 | 必填 | 说明 |
2578  | -------- | -------- | -------- | -------- |
2579  | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注册的回调。 |
2580  | flags | number | 是 | 死亡通知标志。 |
2581
2582**返回值:**
2583    | 类型 | 说明 |
2584  | -------- | -------- |
2585  | boolean | 如果回调注册成功,则返回true;否则返回false。 |
2586
2587
2588### removeDeathRecipient
2589
2590removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean
2591
2592注销用于接收远程对象死亡通知的回调。
2593
2594**系统能力**:SystemCapability.Communication.IPC.Core
2595
2596**参数:**
2597    | 参数名 | 类型 | 必填 | 说明 |
2598  | -------- | -------- | -------- | -------- |
2599  | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注销的回调。 |
2600  | flags | number | 是 | 死亡通知标志。 |
2601
2602**返回值:**
2603    | 类型 | 说明 |
2604  | -------- | -------- |
2605  | boolean | 如果回调成功注销,则返回true;否则返回false。 |
2606
2607
2608### getInterfaceDescriptor
2609
2610getInterfaceDescriptor(): string
2611
2612获取对象的接口描述符。接口描述符为字符串。
2613
2614**系统能力**:SystemCapability.Communication.IPC.Core
2615
2616**返回值:**
2617    | 类型 | 说明 |
2618  | -------- | -------- |
2619  | string | 返回接口描述符。 |
2620
2621
2622### isObjectDead
2623
2624isObjectDead(): boolean
2625
2626检查当前对象是否死亡。
2627
2628**系统能力**:SystemCapability.Communication.IPC.Core
2629
2630**返回值:**
2631    | 类型 | 说明 |
2632  | -------- | -------- |
2633  | boolean | 如果对象已死亡,则返回true;否则返回false。 |
2634
2635
2636## RemoteProxy
2637
2638实现IRemoteObject代理对象。
2639
2640**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core2641
2642| 参数                  | 值                      | 说明                              |
2643| --------------------- | ----------------------- | --------------------------------- |
2644| PING_TRANSACTION      | 1599098439 (0x5f504e47) | 内部指令码,用于测试IPC服务正常。 |
2645| DUMP_TRANSACTION      | 1598311760 (0x5f444d50) | 内部指令码,获取Binder内部状态。 |
2646| INTERFACE_TRANSACTION | 1598968902 (0x5f4e5446) | 内部指令码,获取对端接口描述符。  |
2647| MIN_TRANSACTION_ID    | 1 (0x00000001)          | 最小有效指令码。                  |
2648| MAX_TRANSACTION_ID    | 16777215 (0x00FFFFFF)   | 最大有效指令码。                  |
2649
2650
2651
2652
2653### sendRequest<sup>(deprecated)</sup>
2654
2655> **说明:**
2656> 从 API Version 8 开始废弃,建议使用[sendRequest<sup>8+</sup>](#sendrequest8-2)替代。
2657
2658sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): boolean
2659
2660以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
2661
2662**系统能力**:SystemCapability.Communication.IPC.Core
2663
2664**参数:**
2665    | 参数名 | 类型 | 必填 | 说明 |
2666  | -------- | -------- | -------- | -------- |
2667  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
2668  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
2669  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
2670  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
2671
2672**返回值:**
2673    | 类型 | 说明 |
2674  | -------- | -------- |
2675  | boolean | 返回一个布尔值,true表示成功,false表示失败。|
2676
2677
2678**示例:**
2679
2680  ```
2681  import FA from "@ohos.ability.featureAbility";
2682  let proxy;
2683  let connect = {
2684      onConnect: function(elementName, remoteProxy) {
2685          console.log("RpcClient: js onConnect called.");
2686          proxy = remoteProxy;
2687      },
2688      onDisconnect: function(elementName) {
2689          console.log("RpcClient: onDisconnect");
2690      },
2691      onFailed: function() {
2692          console.log("RpcClient: onFailed");
2693      }
2694  };
2695  let want = {
2696      "bundleName": "com.ohos.server",
2697      "abilityName": "com.ohos.server.MainAbility",
2698  };
2699  FA.connectAbility(want, connect);
2700  let option = new rpc.MessageOption();
2701  let data = rpc.MessageParcel.create();
2702  let reply = rpc.MessageParcel.create();
2703  data.writeInt(1);
2704  data.writeString("hello");
2705  let ret: boolean = proxy.sendRequest(1, data, reply, option);
2706  if (ret) {
2707      console.log("sendRequest got result");
2708      let msg = reply.readString();
2709      console.log("RPCTest: reply msg: " + msg);
2710  } else {
2711      console.log("RPCTest: sendRequest failed");
2712  }
2713  console.log("RPCTest: sendRequest ends, reclaim parcel");
2714  data.reclaim();
2715  reply.reclaim();
2716  ```
2717
2718### sendRequest<sup>8+</sup>
2719
2720sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): Promise&lt;SendRequestResult&gt;
2721
2722以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
2723
2724**系统能力**:SystemCapability.Communication.IPC.Core
2725
2726**参数:**
2727    | 参数名 | 类型 | 必填 | 说明 |
2728  | -------- | -------- | -------- | -------- |
2729  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
2730  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
2731  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
2732  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
2733
2734**返回值:**
2735    | 类型 | 说明 |
2736  | -------- | -------- |
2737  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。|
2738
2739**示例:**
2740
2741  ```
2742  import FA from "@ohos.ability.featureAbility";
2743  let proxy;
2744  let connect = {
2745      onConnect: function(elementName, remoteProxy) {
2746          console.log("RpcClient: js onConnect called.");
2747          proxy = remoteProxy;
2748      },
2749      onDisconnect: function(elementName) {
2750          console.log("RpcClient: onDisconnect");
2751      },
2752      onFailed: function() {
2753          console.log("RpcClient: onFailed");
2754      }
2755  };
2756  let want = {
2757      "bundleName": "com.ohos.server",
2758      "abilityName": "com.ohos.server.MainAbility",
2759  };
2760  FA.connectAbility(want, connect);
2761  let option = new rpc.MessageOption();
2762  let data = rpc.MessageParcel.create();
2763  let reply = rpc.MessageParcel.create();
2764  data.writeInt(1);
2765  data.writeString("hello");
2766  proxy.sendRequest(1, data, reply, option)
2767      .then(function(result) {
2768          if (result.errCode === 0) {
2769              console.log("sendRequest got result");
2770              result.reply.readException();
2771              let msg = result.reply.readString();
2772              console.log("RPCTest: reply msg: " + msg);
2773          } else {
2774              console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
2775          }
2776      }).catch(function(e) {
2777          console.log("RPCTest: sendRequest got exception: " + e.message);
2778      }).finally (() => {
2779          console.log("RPCTest: sendRequest ends, reclaim parcel");
2780          data.reclaim();
2781          reply.reclaim();
2782      });
2783  ```
2784
2785
2786### sendRequest<sup>8+</sup>
2787
2788sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
2789
2790以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
2791
2792**系统能力**:SystemCapability.Communication.IPC.Core
2793
2794**参数:**
2795    | 参数名 | 类型 | 必填 | 说明 |
2796  | -------- | -------- | -------- | -------- |
2797  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
2798  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
2799  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
2800  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
2801  | callback | AsyncCallback&lt;SendRequestResult&gt; | 是 | 接收发送结果的回调。 |
2802
2803**示例:**
2804
2805  ```
2806  import FA from "@ohos.ability.featureAbility";
2807  let proxy;
2808  let connect = {
2809      onConnect: function(elementName, remoteProxy) {
2810          console.log("RpcClient: js onConnect called.");
2811          proxy = remoteProxy;
2812      },
2813      onDisconnect: function(elementName) {
2814          console.log("RpcClient: onDisconnect");
2815      },
2816      onFailed: function() {
2817          console.log("RpcClient: onFailed");
2818      }
2819  };
2820  let want = {
2821      "bundleName": "com.ohos.server",
2822      "abilityName": "com.ohos.server.MainAbility",
2823  };
2824  function sendRequestCallback(result) {
2825      if (result.errCode === 0) {
2826          console.log("sendRequest got result");
2827          result.reply.readException();
2828          let msg = result.reply.readString();
2829          console.log("RPCTest: reply msg: " + msg);
2830      } else {
2831          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
2832      }
2833      console.log("RPCTest: sendRequest ends, reclaim parcel");
2834      result.data.reclaim();
2835      result.reply.reclaim();
2836  }
2837  FA.connectAbility(want, connect);
2838  let option = new rpc.MessageOption();
2839  let data = rpc.MessageParcel.create();
2840  let reply = rpc.MessageParcel.create();
2841  data.writeInt(1);
2842  data.writeString("hello");
2843  proxy.sendRequest(1, data, reply, option, sendRequestCallback);
2844  ```
2845
2846
2847### queryLocalInterface
2848
2849queryLocalInterface(interface: string): IRemoteBroker
2850
2851查询并获取当前接口描述符对应的本地接口对象。
2852
2853**系统能力**:SystemCapability.Communication.IPC.Core
2854
2855**参数:**
2856    | 参数名 | 类型 | 必填 | 说明 |
2857  | -------- | -------- | -------- | -------- |
2858  | interface | string | 是 | 需要查询的接口描述符。 |
2859
2860**返回值:**
2861    | 类型 | 说明 |
2862  | -------- | -------- |
2863  | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 |
2864
2865**示例:**
2866
2867  ```
2868  import FA from "@ohos.ability.featureAbility";
2869  let proxy;
2870  let connect = {
2871      onConnect: function(elementName, remoteProxy) {
2872          console.log("RpcClient: js onConnect called.");
2873          proxy = remoteProxy;
2874      },
2875      onDisconnect: function (elementName) {
2876          console.log("RpcClient: onDisconnect");
2877      },
2878      onFailed: function() {
2879          console.log("RpcClient: onFailed");
2880      }
2881  };
2882  let want = {
2883      "bundleName":"com.ohos.server",
2884      "abilityName":"com.ohos.server.MainAbility",
2885  };
2886  FA.connectAbility(want, connect);
2887  let broker = proxy.queryLocalInterface("testObject");
2888  console.log("RpcClient: queryLocalInterface is " + broker);
2889  ```
2890
2891
2892### addDeathRecippient
2893
2894addDeathRecipient(recipient : DeathRecipient, flags : number): boolean
2895
2896注册用于接收远程对象死亡通知的回调,增加proxy对象上的死亡通知。
2897
2898**系统能力**:SystemCapability.Communication.IPC.Core
2899
2900**参数:**
2901    | 参数名 | 类型 | 必填 | 说明 |
2902  | -------- | -------- | -------- | -------- |
2903  | recipient | [DeathRecipient](#deathrecipient) | 是 | 收件人表示要注册的回调。 |
2904  | flags | number | 是 | 死亡通知标志。保留参数。设置为0。 |
2905
2906**返回值:**
2907    | 类型 | 说明 |
2908  | -------- | -------- |
2909  | boolean | 如果回调注册成功,则返回true;否则返回false。 |
2910
2911**示例:**
2912
2913  ```
2914  import FA from "@ohos.ability.featureAbility";
2915  let proxy;
2916  let connect = {
2917      onConnect: function(elementName, remoteProxy) {
2918          console.log("RpcClient: js onConnect called.");
2919          proxy = remoteProxy;
2920      },
2921      onDisconnect: function(elementName) {
2922          console.log("RpcClient: onDisconnect");
2923      },
2924      onFailed: function() {
2925          console.log("RpcClient: onFailed");
2926      }
2927  };
2928  let want = {
2929      "bundleName": "com.ohos.server",
2930      "abilityName": "com.ohos.server.MainAbility",
2931  };
2932  FA.connectAbility(want, connect);
2933  class MyDeathRecipient {
2934      onRemoteDied() {
2935          console.log("server died");
2936      }
2937  }
2938  let deathRecipient = new MyDeathRecipient();
2939  proxy.addDeathRecippient(deathRecipient, 0);
2940  ```
2941
2942
2943### removeDeathRecipient
2944
2945removeDeathRecipient(recipient : DeathRecipient, flags : number): boolean
2946
2947注销用于接收远程对象死亡通知的回调。
2948
2949**系统能力**:SystemCapability.Communication.IPC.Core
2950
2951**参数:**
2952    | 参数名 | 类型 | 必填 | 说明 |
2953  | -------- | -------- | -------- | -------- |
2954  | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注销的死亡回调。 |
2955  | flags | number | 是 | 死亡通知标志。保留参数。设置为0。 |
2956
2957**返回值:**
2958    | 类型 | 说明 |
2959  | -------- | -------- |
2960  | boolean | 如果回调成功注销,则返回true;否则返回false。 |
2961
2962**示例:**
2963
2964  ```
2965  import FA from "@ohos.ability.featureAbility";
2966  let proxy;
2967  let connect = {
2968      onConnect: function(elementName, remoteProxy) {
2969          console.log("RpcClient: js onConnect called.");
2970          proxy = remoteProxy;
2971      },
2972      onDisconnect: function(elementName) {
2973          console.log("RpcClient: onDisconnect");
2974      },
2975      onFailed: function() {
2976          console.log("RpcClient: onFailed");
2977      }
2978  };
2979  let want = {
2980      "bundleName": "com.ohos.server",
2981      "abilityName": "com.ohos.server.MainAbility",
2982  };
2983  FA.connectAbility(want, connect);
2984  class MyDeathRecipient {
2985      onRemoteDied() {
2986          console.log("server died");
2987      }
2988  }
2989  let deathRecipient = new MyDeathRecipient();
2990  proxy.addDeathRecippient(deathRecipient, 0);
2991  proxy.removeDeathRecipient(deathRecipient, 0);
2992  ```
2993
2994
2995### getInterfaceDescriptor
2996
2997getInterfaceDescriptor(): string
2998
2999查询当前代理对象接口的描述符。
3000
3001**系统能力**:SystemCapability.Communication.IPC.Core
3002
3003**返回值:**
3004    | 类型 | 说明 |
3005  | -------- | -------- |
3006  | string | 当前的接口描述符。 |
3007
3008**示例:**
3009
3010  ```
3011  import FA from "@ohos.ability.featureAbility";
3012  let proxy;
3013  let connect = {
3014      onConnect: function(elementName, remoteProxy) {
3015          console.log("RpcClient: js onConnect called.");
3016          proxy = remoteProxy;
3017      },
3018      onDisconnect: function(elementName) {
3019          console.log("RpcClient: onDisconnect");
3020      },
3021      onFailed: function() {
3022          console.log("RpcClient: onFailed");
3023      }
3024  };
3025  let want = {
3026      "bundleName": "com.ohos.server",
3027      "abilityName": "com.ohos.server.MainAbility",
3028  };
3029  FA.connectAbility(want, connect);
3030  let descriptor = proxy.getInterfaceDescriptor();
3031  console.log("RpcClient: descriptor is " + descriptor);
3032  ```
3033
3034
3035### isObjectDead
3036
3037isObjectDead(): boolean
3038
3039指示对应的RemoteObject是否死亡。
3040
3041**系统能力**:SystemCapability.Communication.IPC.Core
3042
3043**返回值:**
3044    | 类型 | 说明 |
3045  | -------- | -------- |
3046  | boolean | 如果对应的RemoteObject已经死亡,返回true,否则返回false。 |
3047
3048**示例:**
3049
3050  ```
3051  import FA from "@ohos.ability.featureAbility";
3052  let proxy;
3053  let connect = {
3054      onConnect: function(elementName, remoteProxy) {
3055          console.log("RpcClient: js onConnect called.");
3056          proxy = remoteProxy;
3057      },
3058      onDisconnect: function(elementName) {
3059          console.log("RpcClient: onDisconnect");
3060      },
3061      onFailed: function() {
3062          console.log("RpcClient: onFailed");
3063      }
3064  };
3065  let want = {
3066      "bundleName": "com.ohos.server",
3067      "abilityName": "com.ohos.server.MainAbility",
3068  };
3069  FA.connectAbility(want, connect);
3070  let isDead = proxy.isObjectDead();
3071  console.log("RpcClient: isObjectDead is " + isDead);
3072  ```
3073
3074
3075## MessageOption
3076
3077公共消息选项(int标志,int等待时间),使用标志中指定的标志构造指定的MessageOption对象。
3078
3079**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core3080
3081  | 参数 | 值 | 说明 |
3082| -------- | -------- | -------- |
3083| TF_SYNC | 0 | 同步调用。 |
3084| TF_ASYNC | 1 | 异步调用。 |
3085| TF_ACCEPT_FDS | 0x10 | 指示[sendRequest](#sendrequest8)接口可以返回文件描述符。 |
3086| TF_WAIT_TIME | 8 | 等待时间。单位秒。 |
3087
3088
3089### constructor
3090
3091constructor(syncFlags?: number, waitTime = TF_WAIT_TIME)
3092
3093MessageOption构造函数。
3094
3095**系统能力**:SystemCapability.Communication.IPC.Core
3096
3097**参数:**
3098    | 参数名 | 类型 | 必填 | 说明 |
3099  | -------- | -------- | -------- | -------- |
3100  | syncFlags | number | 否 | 同步调用或异步调用标志。默认同步调用。 |
3101  | waitTime | number | 否 | 调用rpc最长等待时间。默认&nbsp;TF_WAIT_TIME。 |
3102
3103
3104### getFlags
3105
3106getFlags(): number
3107
3108获取同步调用或异步调用标志。
3109
3110**系统能力**:SystemCapability.Communication.IPC.Core
3111
3112**返回值:**
3113    | 类型 | 说明 |
3114  | -------- | -------- |
3115  | number | 调用成功返回同步调用或异步调用标志。 |
3116
3117
3118### setFlags
3119
3120setFlags(flags: number): void
3121
3122设置同步调用或异步调用标志。
3123
3124**系统能力**:SystemCapability.Communication.IPC.Core
3125
3126**参数:**
3127    | 参数名 | 类型 | 必填 | 说明 |
3128  | -------- | -------- | -------- | -------- |
3129  | flags | number | 是 | 同步调用或异步调用标志。 |
3130
3131
3132### getWaitTime
3133
3134getWaitTime(): number
3135
3136获取rpc调用的最长等待时间。
3137
3138**系统能力**:SystemCapability.Communication.IPC.Core
3139
3140**返回值:**
3141    | 类型 | 说明 |
3142  | -------- | -------- |
3143  | number | rpc最长等待时间。 |
3144
3145
3146### setWaitTime
3147
3148setWaitTime(waitTime: number): void
3149
3150设置rpc调用最长等待时间。
3151
3152**系统能力**:SystemCapability.Communication.IPC.Core
3153
3154**参数:**
3155    | 参数名 | 类型 | 必填 | 说明 |
3156  | -------- | -------- | -------- | -------- |
3157  | waitTime | number | 是 | rpc调用最长等待时间。 |
3158
3159
3160## IPCSkeleton
3161
3162用于获取IPC上下文信息,包括获取UID和PID、获取本端和对端设备ID、检查接口调用是否在同一设备上。
3163
3164
3165### getContextObject
3166
3167static getContextObject(): IRemoteObject
3168
3169获取系统能力的管理者。
3170
3171**系统能力**:SystemCapability.Communication.IPC.Core
3172
3173**返回值:**
3174    | 类型 | 说明 |
3175  | -------- | -------- |
3176  | [IRemoteObject](#iremoteobject) | 返回系统能力管理者。 |
3177
3178**示例:**
3179
3180  ```
3181  let samgr = rpc.IPCSkeleton.getContextObject();
3182  console.log("RpcServer: getContextObject result: " + samgr);
3183  ```
3184
3185
3186### getCallingPid
3187
3188static getCallingPid(): number
3189
3190获取调用者的PID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的PID。
3191
3192**系统能力**:SystemCapability.Communication.IPC.Core
3193
3194**返回值:**
3195    | 类型 | 说明 |
3196  | -------- | -------- |
3197  | number | 返回调用者的PID。 |
3198
3199**示例:**
3200
3201  ```
3202  class Stub extends rpc.RemoteObject {
3203      onRemoteRequest(code, data, reply, option) {
3204          let callerPid = rpc.IPCSkeleton.getCallingPid();
3205          console.log("RpcServer: getCallingPid result: " + callerPid);
3206          return true;
3207      }
3208  }
3209  ```
3210
3211
3212### getCallingUid
3213
3214static getCallingUid(): number
3215
3216获取调用者的UID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的UID。
3217
3218**系统能力**:SystemCapability.Communication.IPC.Core
3219
3220**返回值:**
3221    | 类型 | 说明 |
3222  | -------- | -------- |
3223  | number | 返回调用者的UID。 |
3224
3225**示例:**
3226
3227  ```
3228  class Stub extends rpc.RemoteObject {
3229      onRemoteRequest(code, data, reply, option) {
3230          let callerUid = rpc.IPCSkeleton.getCallingUid();
3231          console.log("RpcServer: getCallingUid result: " + callerUid);
3232          return true;
3233      }
3234  }
3235  ```
3236
3237### getCallingTokenId<sup>8+</sup>
3238
3239static getCallingTokenId(): number;
3240
3241获取调用者的TokenId,用于被调用方对调用方的身份校验。
3242
3243**系统能力**:SystemCapability.Communication.IPC.Core
3244
3245* 返回值
3246
3247    | 类型   | 说明                  |
3248  | ------ | --------------------- |
3249  | number | 返回调用者的TokenId。 |
3250
3251* 示例
3252
3253  ```
3254  class Stub extends rpc.RemoteObject {
3255      onRemoteRequest(code, data, reply, option) {
3256          let callerTokenId = rpc.IPCSkeleton.getCallingTokenId();
3257          console.log("RpcServer: getCallingTokenId result: " + callerTokenId);
3258          return true;
3259      }
3260  }
3261  ```
3262
3263
3264### getCallingDeviceID
3265
3266static getCallingDeviceID(): string
3267
3268获取调用者进程所在的设备ID。
3269
3270**系统能力**:SystemCapability.Communication.IPC.Core
3271
3272**返回值:**
3273    | 类型 | 说明 |
3274  | -------- | -------- |
3275  | string | 返回调用者进程所在的设备ID。 |
3276
3277**示例:**
3278
3279  ```
3280  class Stub extends rpc.RemoteObject {
3281      onRemoteRequest(code, data, reply, option) {
3282          let callerDeviceID = rpc.IPCSkeleton.getCallingDeviceID();
3283          console.log("RpcServer: callerDeviceID is: " + callerDeviceID);
3284          return true;
3285      }
3286  }
3287  ```
3288
3289
3290### getLocalDeviceID
3291
3292static getLocalDeviceID(): string
3293
3294获取本端设备ID。
3295
3296**系统能力**:SystemCapability.Communication.IPC.Core
3297
3298**返回值:**
3299    | 类型 | 说明 |
3300  | -------- | -------- |
3301  | string | 返回本地设备的ID。 |
3302
3303**示例:**
3304
3305  ```
3306  class Stub extends rpc.RemoteObject {
3307      onRemoteRequest(code, data, reply, option) {
3308          let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID();
3309          console.log("RpcServer: localDeviceID is: " + localDeviceID);
3310          return true;
3311      }
3312  }
3313  ```
3314
3315
3316### isLocalCalling
3317
3318static isLocalCalling(): boolean
3319
3320检查当前通信对端是否是本设备的进程。
3321
3322**系统能力**:SystemCapability.Communication.IPC.Core
3323
3324**返回值:**
3325    | 类型 | 说明 |
3326  | -------- | -------- |
3327  | boolean | 如果调用是在同一设备上进行的,则返回true,否则返回false。 |
3328
3329**示例:**
3330
3331  ```
3332  class Stub extends rpc.RemoteObject {
3333      onRemoteRequest(code, data, reply, option) {
3334          let isLocalCalling = rpc.IPCSkeleton.isLocalCalling();
3335          console.log("RpcServer: isLocalCalling is: " + isLocalCalling);
3336          return true;
3337      }
3338  }
3339  ```
3340
3341
3342### flushCommands
3343
3344static flushCommands(object : IRemoteObject): number
3345
3346将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。
3347
3348**系统能力**:SystemCapability.Communication.IPC.Core
3349
3350**参数:**
3351    | 参数名 | 类型 | 必填 | 说明 |
3352  | -------- | -------- | -------- | -------- |
3353  | object | [IRemoteObject](#iremoteobject) | 是 | 指定的RemoteProxy。 |
3354
3355
3356**返回值:**
3357    | 类型 | 说明 |
3358  | -------- | -------- |
3359  | number | 如果操作成功,返回0;如果输入对象为空或RemoteObject,或者操作失败,返回错误代码。 |
3360
3361**示例:**
3362
3363  ```
3364  class MyDeathRecipient {
3365      onRemoteDied() {
3366          console.log("server died");
3367      }
3368  }
3369  class TestRemoteObject extends rpc.RemoteObject {
3370      constructor(descriptor) {
3371          super(descriptor);
3372      }
3373      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3374          return true;
3375      }
3376      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3377          return true;
3378      }
3379      isObjectDead(): boolean {
3380          return false;
3381      }
3382  }
3383  let remoteObject = new TestRemoteObject("aaa");
3384  let ret = rpc.IPCSkeleton.flushCommands(remoteObject);
3385  console.log("RpcServer: flushCommands result: " + ret);
3386  ```
3387
3388
3389### resetCallingIdentity
3390
3391static resetCallingIdentity(): string
3392
3393将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。
3394
3395**系统能力**:SystemCapability.Communication.IPC.Core
3396
3397**返回值:**
3398    | 类型 | 说明 |
3399  | -------- | -------- |
3400  | string | 返回包含远程用户的UID和PID的字符串。 |
3401
3402**示例:**
3403
3404  ```
3405  class Stub extends rpc.RemoteObject {
3406      onRemoteRequest(code, data, reply, option) {
3407          let callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
3408          console.log("RpcServer: callingIdentity is: " + callingIdentity);
3409          return true;
3410      }
3411  }
3412  ```
3413
3414
3415### setCallingIdentity
3416
3417static setCallingIdentity(identity : string): boolean
3418
3419将UID和PID恢复为远程用户的UID和PID。它通常在使用resetCallingIdentity后调用,需要resetCallingIdentity返回的远程用户的UID和PID。
3420
3421**系统能力**:SystemCapability.Communication.IPC.Core
3422
3423**参数:**
3424    | 参数名 | 类型 | 必填 | 说明 |
3425  | -------- | -------- | -------- | -------- |
3426  | identity | string | 是 | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |
3427
3428**返回值:**
3429    | 类型 | 说明 |
3430  | -------- | -------- |
3431  | boolean | 如果操作成功,则返回true;否则返回false。 |
3432
3433**示例:**
3434
3435  ```
3436  class Stub extends rpc.RemoteObject {
3437      onRemoteRequest(code, data, reply, option) {
3438          let callingIdentity = null;
3439          try {
3440              callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
3441              console.log("RpcServer: callingIdentity is: " + callingIdentity);
3442          } finally {
3443              let ret = rpc.IPCSkeleton.setCallingIdentity("callingIdentity ");
3444              console.log("RpcServer: setCallingIdentity is: " + ret);
3445          }
3446          return true;
3447      }
3448  }
3449  ```
3450
3451
3452## RemoteObject
3453
3454实现远程对象。服务提供者必须继承此类。
3455
3456
3457### constructor
3458
3459constructor(descriptor: string)
3460
3461RemoteObject构造函数。
3462
3463**系统能力**:SystemCapability.Communication.IPC.Core
3464
3465**参数:**
3466    | 参数名 | 类型 | 必填 | 说明 |
3467  | -------- | -------- | -------- | -------- |
3468  | descriptor | string | 是 | 接口描述符。 |
3469
3470
3471### sendRequest<sup>(deprecated)</sup>
3472
3473> **说明:**
3474> 从 API Version 8 开始废弃,建议使用[sendRequest<sup>8+</sup>](#sendrequest8-4)替代。
3475
3476sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): boolean
3477
3478以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
3479
3480**系统能力**:SystemCapability.Communication.IPC.Core
3481
3482**参数:**
3483    | 参数名 | 类型 | 必填 | 说明 |
3484  | -------- | -------- | -------- | -------- |
3485  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
3486  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
3487  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
3488  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
3489
3490**返回值:**
3491    | 类型 | 说明 |
3492  | -------- | -------- |
3493  | boolean | 返回一个布尔值,true表示成功,false表示失败。|
3494
3495
3496**示例:**
3497
3498  ```
3499  class MyDeathRecipient {
3500      onRemoteDied() {
3501          console.log("server died");
3502      }
3503  }
3504  class TestRemoteObject extends rpc.RemoteObject {
3505      constructor(descriptor) {
3506          super(descriptor);
3507      }
3508      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3509          return true;
3510      }
3511      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3512          return true;
3513      }
3514      isObjectDead(): boolean {
3515          return false;
3516      }
3517  }
3518  let testRemoteObject = new TestRemoteObject("testObject");
3519  let option = new rpc.MessageOption();
3520  let data = rpc.MessageParcel.create();
3521  let reply = rpc.MessageParcel.create();
3522  data.writeInt(1);
3523  data.writeString("hello");
3524  let ret: boolean = testRemoteObject.sendRequest(1, data, reply, option);
3525  if (ret) {
3526      console.log("sendRequest got result");
3527      let msg = reply.readString();
3528      console.log("RPCTest: reply msg: " + msg);
3529  } else {
3530      console.log("RPCTest: sendRequest failed");
3531  }
3532  console.log("RPCTest: sendRequest ends, reclaim parcel");
3533  data.reclaim();
3534  reply.reclaim();
3535  ```
3536
3537
3538### sendRequest<sup>8+</sup>
3539
3540sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): Promise&lt;SendRequestResult&gt;
3541
3542以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
3543
3544**系统能力**:SystemCapability.Communication.IPC.Core
3545
3546**参数:**
3547    | 参数名 | 类型 | 必填 | 说明 |
3548  | -------- | -------- | -------- | -------- |
3549  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
3550  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
3551  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
3552  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
3553
3554**返回值:**
3555    | 类型 | 说明 |
3556  | -------- | -------- |
3557  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。|
3558
3559
3560**示例:**
3561
3562  ```
3563  class MyDeathRecipient {
3564      onRemoteDied() {
3565          console.log("server died");
3566      }
3567  }
3568  class TestRemoteObject extends rpc.RemoteObject {
3569      constructor(descriptor) {
3570          super(descriptor);
3571      }
3572      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3573          return true;
3574      }
3575      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3576          return true;
3577      }
3578      isObjectDead(): boolean {
3579          return false;
3580      }
3581  }
3582  let testRemoteObject = new TestRemoteObject("testObject");
3583  let option = new rpc.MessageOption();
3584  let data = rpc.MessageParcel.create();
3585  let reply = rpc.MessageParcel.create();
3586  data.writeInt(1);
3587  data.writeString("hello");
3588  testRemoteObject.sendRequest(1, data, reply, option)
3589      .then(function(result) {
3590          if (result.errCode === 0) {
3591              console.log("sendRequest got result");
3592              result.reply.readException();
3593              let msg = result.reply.readString();
3594              console.log("RPCTest: reply msg: " + msg);
3595          } else {
3596              console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
3597          }
3598      }).catch(function(e) {
3599          console.log("RPCTest: sendRequest got exception: " + e.message);
3600      }).finally (() => {
3601          console.log("RPCTest: sendRequest ends, reclaim parcel");
3602          data.reclaim();
3603          reply.reclaim();
3604      });
3605  ```
3606
3607
3608### sendRequest<sup>8+</sup>
3609
3610sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
3611
3612以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
3613
3614**系统能力**:SystemCapability.Communication.IPC.Core
3615
3616**参数:**
3617    | 参数名 | 类型 | 必填 | 说明 |
3618  | -------- | -------- | -------- | -------- |
3619  | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
3620  | data | [MessageParcel](#messageparcel) | 是 | 保存待发送数据的&nbsp;MessageParcel对象。 |
3621  | reply | [MessageParcel](#messageparcel) | 是 | 接收应答数据的MessageParcel对象。 |
3622  | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 |
3623  | AsyncCallback | AsyncCallback&lt;SendRequestResult&gt; | 是 | 接收发送结果的回调。 |
3624
3625
3626**示例:**
3627
3628  ```
3629  class MyDeathRecipient {
3630      onRemoteDied() {
3631          console.log("server died");
3632      }
3633  }
3634  class TestRemoteObject extends rpc.RemoteObject {
3635      constructor(descriptor) {
3636          super(descriptor);
3637      }
3638      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3639          return true;
3640      }
3641      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3642          return true;
3643      }
3644      isObjectDead(): boolean {
3645          return false;
3646      }
3647  }
3648  function sendRequestCallback(result) {
3649      if (result.errCode === 0) {
3650          console.log("sendRequest got result");
3651          result.reply.readException();
3652          let msg = result.reply.readString();
3653          console.log("RPCTest: reply msg: " + msg);
3654      } else {
3655          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
3656      }
3657      console.log("RPCTest: sendRequest ends, reclaim parcel");
3658      result.data.reclaim();
3659      result.reply.reclaim();
3660  }
3661  let testRemoteObject = new TestRemoteObject("testObject");
3662  let option = new rpc.MessageOption();
3663  let data = rpc.MessageParcel.create();
3664  let reply = rpc.MessageParcel.create();
3665  data.writeInt(1);
3666  data.writeString("hello");
3667  testRemoteObject.sendRequest(1, data, reply, option, sendRequestCallback);
3668  ```
3669
3670
3671### onRemoteRequest
3672
3673onRemoteRequest(code : number, data : MessageParcel, reply: MessageParcel, options : MessageOption): boolean
3674
3675sendRequest请求的响应处理函数,服务端在该函数里处理请求,回复结果。
3676
3677**系统能力**:SystemCapability.Communication.IPC.Core
3678
3679**参数:**
3680    | 参数名 | 类型 | 必填 | 说明 |
3681  | -------- | -------- | -------- | -------- |
3682  | code | number | 是 | 对端发送的服务请求码。 |
3683  | data | [MessageParcel](#messageparcel) | 是 | 携带客户端调用参数的MessageParcel对象。 |
3684  | reply | [MessageParcel](#messageparcel) | 是 | 写入结果的MessageParcel对象。 |
3685  | option | [MessageOption](#messageoption) | 是 | 指示操作是同步还是异步。 |
3686
3687**返回值:**
3688    | 类型 | 说明 |
3689  | -------- | -------- |
3690  | boolean | 如果操作成功,则返回true;否则返回false。 |
3691
3692
3693**示例:**
3694
3695  ```
3696  class MyDeathRecipient {
3697      onRemoteDied() {
3698          console.log("server died");
3699      }
3700  }
3701  class TestRemoteObject extends rpc.RemoteObject {
3702      constructor(descriptor) {
3703          super(descriptor);
3704      }
3705      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3706          return true;
3707      }
3708      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3709          return true;
3710      }
3711      isObjectDead(): boolean {
3712          return false;
3713      }
3714
3715      onRemoteRequest(code, data, reply, option) {
3716          if (code === 1) {
3717              console.log("RpcServer: onRemoteRequest called");
3718              return true;
3719          } else {
3720              console.log("RpcServer: unknown code: " + code);
3721              return false;
3722          }
3723      }
3724  }
3725  ```
3726
3727
3728### getCallingUid
3729
3730getCallingUid(): number
3731
3732获取通信对端的进程Uid。
3733
3734**系统能力**:SystemCapability.Communication.IPC.Core
3735
3736**返回值:**
3737    | 类型 | 说明 |
3738  | -------- | -------- |
3739  | number | 返回通信对端的进程Uid。 |
3740
3741
3742**示例:**
3743
3744  ```
3745  class MyDeathRecipient {
3746      onRemoteDied() {
3747          console.log("server died");
3748      }
3749  }
3750  class TestRemoteObject extends rpc.RemoteObject {
3751      constructor(descriptor) {
3752          super(descriptor);
3753      }
3754      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3755          return true;
3756      }
3757      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3758          return true;
3759      }
3760      isObjectDead(): boolean {
3761          return false;
3762      }
3763  }
3764  let testRemoteObject = new TestRemoteObject("testObject");
3765  console.log("RpcServer: getCallingUid: " + testRemoteObject.getCallingUid());
3766  ```
3767
3768
3769### getCallingPid
3770
3771getCallingPid(): number
3772
3773获取通信对端的进程Pid。
3774
3775**系统能力**:SystemCapability.Communication.IPC.Core
3776
3777**返回值:**
3778    | 类型 | 说明 |
3779  | -------- | -------- |
3780  | number | 返回通信对端的进程Pid。 |
3781
3782
3783**示例:**
3784
3785  ```
3786  class MyDeathRecipient {
3787      onRemoteDied() {
3788          console.log("server died");
3789      }
3790  }
3791  class TestRemoteObject extends rpc.RemoteObject {
3792      constructor(descriptor) {
3793          super(descriptor);
3794      }
3795      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3796          return true;
3797      }
3798      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3799          return true;
3800      }
3801      isObjectDead(): boolean {
3802          return false;
3803      }
3804  }
3805  let testRemoteObject = new TestRemoteObject("testObject");
3806  console.log("RpcServer: getCallingPid: " + testRemoteObject.getCallingPid());
3807  ```
3808
3809
3810### queryLocalInterface
3811
3812queryLocalInterface(descriptor: string): IRemoteBroker
3813
3814查询并获取当前接口描述符对应的远端对象是否已经存在。
3815
3816**系统能力**:SystemCapability.Communication.IPC.Core
3817
3818**参数:**
3819    | 参数名 | 类型 | 必填 | 说明 |
3820  | -------- | -------- | -------- | -------- |
3821  | descriptor | string | 是 | 需要查询的接口描述符。 |
3822
3823**返回值:**
3824    | 类型 | 说明 |
3825  | -------- | -------- |
3826  | IRemoteBroker | 如果接口描述符对应的远端对象存在,则返回该远端对象,否则返回Null。 |
3827
3828
3829**示例:**
3830
3831  ```
3832  class MyDeathRecipient {
3833      onRemoteDied() {
3834          console.log("server died");
3835      }
3836  }
3837  class TestRemoteObject extends rpc.RemoteObject {
3838      constructor(descriptor) {
3839          super(descriptor);
3840      }
3841      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3842          return true;
3843      }
3844      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3845          return true;
3846      }
3847      isObjectDead(): boolean {
3848          return false;
3849      }
3850  }
3851  let testRemoteObject = new TestRemoteObject("testObject");
3852  let broker = testRemoteObject.queryLocalInterface("testObject");
3853  ```
3854
3855
3856### getInterfaceDescriptor
3857
3858getInterfaceDescriptor(): string
3859
3860查询接口描述符。
3861
3862**系统能力**:SystemCapability.Communication.IPC.Core
3863
3864**返回值:**
3865    | 类型 | 说明 |
3866  | -------- | -------- |
3867  | string | 返回接口描述符。 |
3868
3869
3870**示例:**
3871
3872  ```
3873  class MyDeathRecipient {
3874      onRemoteDied() {
3875          console.log("server died");
3876      }
3877  }
3878  class TestRemoteObject extends rpc.RemoteObject {
3879      constructor(descriptor) {
3880          super(descriptor);
3881      }
3882      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3883          return true;
3884      }
3885      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3886          return true;
3887      }
3888      isObjectDead(): boolean {
3889          return false;
3890      }
3891  }
3892  let testRemoteObject = new TestRemoteObject("testObject");
3893  let descriptor = testRemoteObject.getInterfaceDescriptor();
3894  console.log("RpcServer: descriptor is: " + descriptor);
3895  ```
3896
3897
3898### attachLocalInterface
3899
3900attachLocalInterface(localInterface: IRemoteBroker, descriptor: string): void
3901
3902此接口用于把接口描述符和IRemoteBroker对象绑定。
3903
3904**系统能力**:SystemCapability.Communication.IPC.Core
3905
3906**参数:**
3907    | 参数名 | 类型 | 必填 | 说明 |
3908  | -------- | -------- | -------- | -------- |
3909  | localInterface | IRemoteBroker | 是 | 将与描述符绑定的IRemoteBroker对象。 |
3910  | descriptor | string | 是 | 用于与IRemoteBroker对象绑定的描述符。 |
3911
3912
3913**示例:**
3914
3915  ```
3916  class MyDeathRecipient {
3917      onRemoteDied() {
3918          console.log("server died");
3919      }
3920  }
3921  class TestRemoteObject extends rpc.RemoteObject {
3922      constructor(descriptor) {
3923          super(descriptor);
3924          this.attachLocalInterface(this, descriptor);
3925      }
3926      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3927          return true;
3928      }
3929      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
3930          return true;
3931      }
3932      isObjectDead(): boolean {
3933          return false;
3934      }
3935      asObject(): rpc.IRemoteObject {
3936          return this;
3937      }
3938  }
3939  let testRemoteObject = new TestRemoteObject("testObject");
3940  ```
3941
3942
3943## Ashmem<sup>8+</sup>
3944
3945提供与匿名共享内存对象相关的方法,包括创建、关闭、映射和取消映射Ashmem、从Ashmem读取数据和写入数据、获取Ashmem大小、设置Ashmem保护。
3946
3947映射内存保护类型:
3948
3949**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core3950
3951  | 参数名 | 值 | 说明 |
3952| -------- | -------- | -------- |
3953| PROT_EXEC | 4 | 映射的内存可执行 |
3954| PROT_NONE | 0 | 映射的内存不可访问 |
3955| PROT_READ | 1 | 映射的内存可读 |
3956| PROT_WRITE | 2 | 映射的内存可写 |
3957
3958
3959### createAshmem<sup>8+</sup>
3960
3961static createAshmem(name: string, size: number): Ashmem
3962
3963根据指定的名称和大小创建Ashmem对象。
3964
3965**系统能力**:SystemCapability.Communication.IPC.Core
3966
3967**参数:**
3968    | 参数名 | 类型 | 必填 | 说明 |
3969  | -------- | -------- | -------- | -------- |
3970  | name | string | 是 | 名称,用于查询Ashmem信息。 |
3971  | size | number | 是 | Ashmem的大小,以字节为单位。 |
3972
3973**返回值:**
3974    | 类型 | 说明 |
3975  | -------- | -------- |
3976  | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
3977
3978
3979**示例:**
3980
3981  ```
3982  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
3983  let size = ashmem.getAshmemSize();
3984  console.log("RpcTest: get ashemm by createAshmem : " + ashmem + " size is : " + size);
3985  ```
3986
3987
3988### createAshmemFromExisting<sup>8+</sup>
3989
3990static createAshmemFromExisting(ashmem: Ashmem): Ashmem
3991
3992通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。
3993
3994**系统能力**:SystemCapability.Communication.IPC.Core
3995
3996**参数:**
3997    | 参数名 | 类型 | 必填 | 说明 |
3998  | -------- | -------- | -------- | -------- |
3999  | ashmem | Ashmem | 是 | 已存在的Ashmem对象。 |
4000
4001**返回值:**
4002    | 类型 | 说明 |
4003  | -------- | -------- |
4004  | Ashmem | 返回创建的Ashmem对象。 |
4005
4006
4007**示例:**
4008
4009  ```
4010  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4011  let ashmem2 = rpc.Ashmem.createAshmemFromExisting(ashmem);
4012  let size = ashmem2.getAshmemSize();
4013  console.log("RpcTest: get ashemm by createAshmemFromExisting : " + ashmem2 + " size is : " + size);
4014  ```
4015
4016
4017### closeAshmem<sup>8+</sup>
4018
4019closeAshmem(): void
4020
4021关闭这个Ashmem。
4022
4023**系统能力**:SystemCapability.Communication.IPC.Core
4024
4025**示例:**
4026
4027  ```
4028  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4029  ashmem.closeAshmem();
4030  ```
4031
4032
4033### unmapAshmem<sup>8+</sup>
4034
4035unmapAshmem(): void
4036
4037删除该Ashmem对象的地址映射。
4038
4039**系统能力**:SystemCapability.Communication.IPC.Core
4040
4041**示例:**
4042
4043  ```
4044  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4045  ashmem.unmapAshmem();
4046  ```
4047
4048
4049### getAshmemSize<sup>8+</sup>
4050
4051getAshmemSize(): number
4052
4053获取Ashmem对象的内存大小。
4054
4055**系统能力**:SystemCapability.Communication.IPC.Core
4056
4057**返回值:**
4058    | 类型 | 说明 |
4059  | -------- | -------- |
4060  | number | 返回Ashmem对象的内存大小。 |
4061
4062**示例:**
4063
4064  ```
4065  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4066  let size = ashmem.getAshmemSize();
4067  console.log("RpcTest: get ashmem is " + ashmem + " size is : " + size);
4068  ```
4069
4070
4071### mapAshmem<sup>8+</sup>
4072
4073mapAshmem(mapType: number): boolean
4074
4075在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。
4076
4077**系统能力**:SystemCapability.Communication.IPC.Core
4078
4079**参数:**
4080    | 参数名 | 类型 | 必填 | 说明 |
4081  | -------- | -------- | -------- | -------- |
4082  | mapType | number | 是 | 指定映射的内存区域的保护等级。 |
4083
4084**返回值:**
4085    | 类型 | 说明 |
4086  | -------- | -------- |
4087  | boolean | 如果映射成功,则返回true;否则返回false。 |
4088
4089**示例:**
4090
4091  ```
4092  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4093  let mapReadAndWrite = ashmem.mapAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
4094  console.log("RpcTest: map ashmem result is  : " + mapReadAndWrite);
4095  ```
4096
4097
4098### mapReadAndWriteAshmem<sup>8+</sup>
4099
4100mapReadAndWriteAshmem(): boolean
4101
4102在此进程虚拟地址空间上创建可读写的共享文件映射。
4103
4104**系统能力**:SystemCapability.Communication.IPC.Core
4105
4106**返回值:**
4107    | 类型 | 说明 |
4108  | -------- | -------- |
4109  | boolean | 如果映射成功,则返回true;否则返回false。 |
4110
4111**示例:**
4112
4113  ```
4114  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4115  let mapResult = ashmem.mapReadAndWriteAshmem();
4116  console.log("RpcTest: map ashmem result is  : " + mapResult);
4117  ```
4118
4119
4120### mapReadOnlyAshmem<sup>8+</sup>
4121
4122mapReadOnlyAshmem(): boolean
4123
4124在此进程虚拟地址空间上创建只读的共享文件映射。
4125
4126**系统能力**:SystemCapability.Communication.IPC.Core
4127
4128**返回值:**
4129    | 类型 | 说明 |
4130  | -------- | -------- |
4131  | boolean | 如果映射成功,则返回true;否则返回false。 |
4132
4133**示例:**
4134
4135  ```
4136  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4137  let mapResult = ashmem.mapReadOnlyAshmem();
4138  console.log("RpcTest: Ashmem mapReadOnlyAshmem result is : " + mapResult);
4139  ```
4140
4141
4142### setProtection<sup>8+</sup>
4143
4144setProtection(protectionType: number): boolean
4145
4146设置映射内存区域的保护等级。
4147
4148**系统能力**:SystemCapability.Communication.IPC.Core
4149
4150**参数:**
4151    | 参数名 | 类型 | 必填 | 说明 |
4152  | -------- | -------- | -------- | -------- |
4153  | protectionType | number | 是 | 要设置的保护类型。 |
4154
4155**返回值:**
4156    | 类型 | 说明 |
4157  | -------- | -------- |
4158  | boolean | 如果设置成功,则返回true;否则返回false。 |
4159
4160**示例:**
4161
4162  ```
4163  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4164  let result = ashmem.setProtection(ashmem.PROT_READ);
4165  console.log("RpcTest: Ashmem setProtection result is : " + result);
4166  ```
4167
4168
4169### writeToAshmem<sup>8+</sup>
4170
4171writeToAshmem(buf: number[], size: number, offset: number): boolean
4172
4173将数据写入此Ashmem对象关联的共享文件。
4174
4175**系统能力**:SystemCapability.Communication.IPC.Core
4176
4177**参数:**
4178    | 参数名 | 类型 | 必填 | 说明 |
4179  | -------- | -------- | -------- | -------- |
4180  | buf | number[] | 是 | 写入Ashmem对象的数据。 |
4181  | size | number | 是 | 要写入的数据大小。 |
4182  | offset | number | 是 | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |
4183
4184**返回值:**
4185    | 类型 | 说明 |
4186  | -------- | -------- |
4187  | boolean | 如果数据写入成功,则返回true;在其他情况下,如数据写入越界或未获得写入权限,则返回false。 |
4188
4189**示例:**
4190
4191  ```
4192  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4193  let mapResult = ashmem.mapReadAndWriteAshmem();
4194  console.info("RpcTest map ashmem result is " + mapResult);
4195  var ByteArrayVar = [1, 2, 3, 4, 5];
4196  let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
4197  console.log("RpcTest: write to Ashmem result is  : " + writeResult);
4198  ```
4199
4200
4201### readFromAshmem<sup>8+</sup>
4202
4203readFromAshmem(size: number, offset: number): number[]
4204
4205从此Ashmem对象关联的共享文件中读取数据。
4206
4207**系统能力**:SystemCapability.Communication.IPC.Core
4208
4209**参数:**
4210    | 参数名 | 类型 | 必填 | 说明 |
4211  | -------- | -------- | -------- | -------- |
4212  | size | number | 是 | 要读取的数据的大小。 |
4213  | offset | number | 是 | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |
4214
4215**返回值:**
4216    | 类型 | 说明 |
4217  | -------- | -------- |
4218  | number[] | 返回读取的数据。 |
4219
4220
4221**示例:**
4222
4223  ```
4224  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
4225  let mapResult = ashmem.mapReadAndWriteAshmem();
4226  console.info("RpcTest map ashmem result is " + mapResult);
4227  var ByteArrayVar = [1, 2, 3, 4, 5];
4228  let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
4229  console.log("RpcTest: write to Ashmem result is  : " + writeResult);
4230  let readResult = ashmem.readFromAshmem(5, 0);
4231  console.log("RpcTest: read to Ashmem result is  : " + readResult);
4232  ```
4233