js-apis-rpc.md 260.1 KB
Newer Older
Z
zengyawen 已提交
1 2
# RPC通信

3
本模块提供进程间通信能力,包括设备内的进程间通信(IPC)和设备间的进程间通信(RPC),前者基于Binder驱动,后者基于软总线驱动。
Z
zengyawen 已提交
4 5 6

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
W
wanghaoxu 已提交
7 8 9 10 11 12 13 14 15
> 本模块从API version 9开始支持异常返回功能。


## 导入模块

```
import rpc from '@ohos.rpc';
```

Z
zengyawen 已提交
16

W
wanghaoxu 已提交
17
## MessageSequence<sup>9+</sup>
Z
zengyawen 已提交
18

W
wanghaoxu 已提交
19
  在RPC过程中,发送方可以使用MessageSequence提供的写方法,将待发送的数据以特定格式写入该对象。接收方可以使用MessageSequence提供的读方法从该对象中读取特定格式的数据。数据格式包括:基础类型及数组、IPC对象、接口描述符和自定义序列化对象。
Z
zengyawen 已提交
20 21 22

### create

W
wanghaoxu 已提交
23
  create(): MessageSequence
Z
zengyawen 已提交
24

W
wanghaoxu 已提交
25
  静态方法,创建MessageSequence对象。
Z
zengyawen 已提交
26

Y
yangguangzhao 已提交
27
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
28

Y
yangguangzhao 已提交
29
**返回值:**
W
wanghaoxu 已提交
30

W
wanghaoxu 已提交
31 32 33
  | 类型            | 说明                            |
  | --------------- | ------------------------------- |
  | MessageSequence | 返回创建的MessageSequence对象。 |
Z
zengyawen 已提交
34

Y
yangguangzhao 已提交
35
**示例:**
Y
yangguangzhao 已提交
36

Z
zengyawen 已提交
37
  ```
W
wanghaoxu 已提交
38
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
39 40 41 42 43 44 45
  console.log("RpcClient: data is " + data);
  ```

### reclaim

reclaim(): void

W
wanghaoxu 已提交
46
释放不再使用的MessageSequence对象。
Z
zengyawen 已提交
47

Y
yangguangzhao 已提交
48
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
49

Y
yangguangzhao 已提交
50
**示例:**
Y
yangguangzhao 已提交
51

Z
zengyawen 已提交
52
  ```
W
wanghaoxu 已提交
53
  let reply = rpc.MessageSequence.create();
Z
zengyawen 已提交
54 55 56 57 58
  reply.reclaim();
  ```

### writeRemoteObject

W
wanghaoxu 已提交
59
writeRemoteObject(object: [IRemoteObject](#iremoteobject)): void
Y
yangguangzhao 已提交
60

W
wanghaoxu 已提交
61
序列化远程对象并将其写入MessageSequence对象。
W
wanghaoxu 已提交
62

Y
yangguangzhao 已提交
63
**系统能力**:SystemCapability.Communication.IPC.Core
W
wanghaoxu 已提交
64

W
wanghaoxu 已提交
65
**参数:**
W
wanghaoxu 已提交
66

W
wanghaoxu 已提交
67 68 69
  | 参数名 | 类型                            | 必填 | 说明                                      |
  | ------ | ------------------------------- | ---- | ----------------------------------------- |
  | object | [IRemoteObject](#iremoteobject) | 是   | 要序列化并写入MessageSequence的远程对象。 |
Y
yangguangzhao 已提交
70

W
wanghaoxu 已提交
71 72
**错误码:**

C
crazy_hu 已提交
73
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
Z
zengyawen 已提交
74

W
wanghaoxu 已提交
75
  | 错误码ID | 错误信息 |
W
wanghaoxu 已提交
76 77 78
  | -------- | ------- |
  | 1900008 | proxy or remote object is invalid |
  | 1900009 | write data to message sequence failed |
W
wanghaoxu 已提交
79

Y
yangguangzhao 已提交
80
**示例:**
Y
yangguangzhao 已提交
81

Z
zengyawen 已提交
82 83 84 85 86 87
  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
  }
W
wanghaoxu 已提交
88
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
89
  let testRemoteObject = new TestRemoteObject("testObject");
W
wanghaoxu 已提交
90 91 92 93 94 95
  try {
      data.writeRemoteObject(testRemoteObject);
  } catch(error) {
      console.info("Rpc write remote object fail, errorCode " + error.code);
      console.info("Rpc write remote object fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
96 97 98 99 100 101
  ```

### readRemoteObject

readRemoteObject(): IRemoteObject

W
wanghaoxu 已提交
102
从MessageSequence读取远程对象。此方法用于反序列化MessageSequence对象以生成IRemoteObject。远程对象按写入MessageSequence的顺序读取。
W
wanghaoxu 已提交
103

Y
yangguangzhao 已提交
104
**系统能力**:SystemCapability.Communication.IPC.Core
W
wanghaoxu 已提交
105

Y
yangguangzhao 已提交
106
**返回值:**
W
wanghaoxu 已提交
107

W
wanghaoxu 已提交
108 109
  | 类型                            | 说明               |
  | ------------------------------- | ------------------ |
Y
yangguangzhao 已提交
110
  | [IRemoteObject](#iremoteobject) | 读取到的远程对象。 |
Z
zengyawen 已提交
111

W
wanghaoxu 已提交
112 113
**错误码:**

C
crazy_hu 已提交
114
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
115

W
wanghaoxu 已提交
116 117 118 119
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900008 | proxy or remote object is invalid |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
120

Y
yangguangzhao 已提交
121
**示例:**
Y
yangguangzhao 已提交
122

Z
zengyawen 已提交
123 124 125 126 127 128
  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
  }
W
wanghaoxu 已提交
129
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
130
  let testRemoteObject = new TestRemoteObject("testObject");
W
wanghaoxu 已提交
131 132 133 134 135 136 137
  try {
      data.writeRemoteObject(testRemoteObject);
      let proxy = data.readRemoteObject();
  } catch(error) {
      console.info("Rpc write remote object fail, errorCode " + error.code);
      console.info("Rpc write remote object fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
138 139 140 141
  ```

### writeInterfaceToken

W
wanghaoxu 已提交
142
writeInterfaceToken(token: string): void
Z
zengyawen 已提交
143

W
wanghaoxu 已提交
144
将接口描述符写入MessageSequence对象,远端对象可使用该信息校验本次通信。
W
wanghaoxu 已提交
145

Y
yangguangzhao 已提交
146
**系统能力**:SystemCapability.Communication.IPC.Core
W
wanghaoxu 已提交
147

W
wanghaoxu 已提交
148
**参数:**
W
wanghaoxu 已提交
149

W
wanghaoxu 已提交
150 151 152
  | 参数名 | 类型   | 必填 | 说明               |
  | ------ | ------ | ---- | ------------------ |
  | token  | string | 是   | 字符串类型描述符。 |
Z
zengyawen 已提交
153

W
wanghaoxu 已提交
154 155
**错误码:**

C
crazy_hu 已提交
156
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
Z
zengyawen 已提交
157

W
wanghaoxu 已提交
158 159 160
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
W
wanghaoxu 已提交
161

Y
yangguangzhao 已提交
162
**示例:**
Y
yangguangzhao 已提交
163

Z
zengyawen 已提交
164
  ```
W
wanghaoxu 已提交
165 166 167 168 169 170 171
  let data = rpc.MessageSequence.create();
  try {
      data.writeInterfaceToken("aaa");
  } catch(error) {
      console.info("rpc write interface fail, errorCode " + error.code);
      console.info("rpc write interface fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
172 173 174 175 176 177
  ```

### readInterfaceToken

readInterfaceToken(): string

W
wanghaoxu 已提交
178
从MessageSequence中读取接口描述符,接口描述符按写入MessageSequence的顺序读取,本地对象可使用该信息检验本次通信。
W
wanghaoxu 已提交
179

Y
yangguangzhao 已提交
180
**系统能力**:SystemCapability.Communication.IPC.Core
W
wanghaoxu 已提交
181

Y
yangguangzhao 已提交
182
**返回值:**
W
wanghaoxu 已提交
183

W
wanghaoxu 已提交
184 185
  | 类型   | 说明                     |
  | ------ | ------------------------ |
Y
yangguangzhao 已提交
186
  | string | 返回读取到的接口描述符。 |
Z
zengyawen 已提交
187

W
wanghaoxu 已提交
188 189
**错误码:**

C
crazy_hu 已提交
190
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
191

W
wanghaoxu 已提交
192 193 194
  | 错误码ID | 错误信息 |
  | ------- | ----- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
195 196


Y
yangguangzhao 已提交
197
**示例:**
Y
yangguangzhao 已提交
198

Z
zengyawen 已提交
199 200 201
  ```
  class Stub extends rpc.RemoteObject {
      onRemoteRequest(code, data, reply, option) {
W
wanghaoxu 已提交
202 203 204 205 206 207 208
          try {
              let interfaceToken = data.readInterfaceToken();
              console.log("RpcServer: interfaceToken is " + interfaceToken);
          } catch(error) {
              console.info("RpcServer: read interfaceToken failed, errorCode " + error.code);
              console.info("RpcServer: read interfaceToken failed, errorMessage " + error.message);
          }
Z
zengyawen 已提交
209 210 211 212 213 214 215 216 217
          return true;
      }
  }
  ```

### getSize

getSize(): number

W
wanghaoxu 已提交
218
获取当前MessageSequence的数据大小。
W
wanghaoxu 已提交
219

Y
yangguangzhao 已提交
220
**系统能力**:SystemCapability.Communication.IPC.Core
W
wanghaoxu 已提交
221

Y
yangguangzhao 已提交
222
**返回值:**
W
wanghaoxu 已提交
223

W
wanghaoxu 已提交
224 225 226
  | 类型   | 说明                                            |
  | ------ | ----------------------------------------------- |
  | number | 获取的MessageSequence的数据大小。以字节为单位。 |
W
wanghaoxu 已提交
227

Y
yangguangzhao 已提交
228
**示例:**
Y
yangguangzhao 已提交
229

Z
zengyawen 已提交
230
  ```
W
wanghaoxu 已提交
231
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
232 233 234 235 236 237 238 239
  let size = data.getSize();
  console.log("RpcClient: size is " + size);
  ```

### getCapacity

getCapacity(): number

W
wanghaoxu 已提交
240
获取当前MessageSequence的容量。
W
wanghaoxu 已提交
241

Y
yangguangzhao 已提交
242
**系统能力**:SystemCapability.Communication.IPC.Core
W
wanghaoxu 已提交
243

Y
yangguangzhao 已提交
244
**返回值:**
W
wanghaoxu 已提交
245

W
wanghaoxu 已提交
246 247
  | 类型   | 说明 |
  | ------ | ----- |
W
wanghaoxu 已提交
248
  | number | 获取的MessageSequence的容量大小。以字节为单位。 |
W
wanghaoxu 已提交
249

Y
yangguangzhao 已提交
250
**示例:**
Y
yangguangzhao 已提交
251

Z
zengyawen 已提交
252
  ```
W
wanghaoxu 已提交
253
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
254 255 256 257 258 259
  let result = data.getCapacity();
  console.log("RpcClient: capacity is " + result);
  ```

### setSize

W
wanghaoxu 已提交
260
setSize(size: number): void
Z
zengyawen 已提交
261

W
wanghaoxu 已提交
262
设置MessageSequence实例中包含的数据大小。
W
wanghaoxu 已提交
263

Y
yangguangzhao 已提交
264
**系统能力**:SystemCapability.Communication.IPC.Core
W
wanghaoxu 已提交
265

W
wanghaoxu 已提交
266
**参数:**
W
wanghaoxu 已提交
267

W
wanghaoxu 已提交
268 269
  | 参数名 | 类型   | 必填 | 说明 |
  | ------ | ------ | ---- | ------ |
W
wanghaoxu 已提交
270
  | size   | number | 是   | MessageSequence实例的数据大小。以字节为单位。 |
Z
zengyawen 已提交
271

Y
yangguangzhao 已提交
272
**示例:**
Y
yangguangzhao 已提交
273

Z
zengyawen 已提交
274
  ```
W
wanghaoxu 已提交
275 276 277
  let data = rpc.MessageSequence.create();
  try {
      data.setSize(16);
C
crazy_hu 已提交
278
      console.log("RpcClient: setSize is " + data.getSize());
W
wanghaoxu 已提交
279 280 281 282
  } catch(error) {
      console.info("rpc set size of MessageSequence fail, errorCode " + error.code);
      console.info("rpc set size of MessageSequence fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
283 284 285 286
  ```

### setCapacity

W
wanghaoxu 已提交
287
setCapacity(size: number): void
Z
zengyawen 已提交
288

W
wanghaoxu 已提交
289
设置MessageSequence实例的存储容量。
Z
zengyawen 已提交
290

Y
yangguangzhao 已提交
291
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
292

W
wanghaoxu 已提交
293
**参数:**
W
wangqinxiao 已提交
294

W
wanghaoxu 已提交
295 296 297
  | 参数名 | 类型   | 必填 | 说明                                          |
  | ------ | ------ | ---- | --------------------------------------------- |
  | size   | number | 是   | MessageSequence实例的存储容量。以字节为单位。 |
Z
zengyawen 已提交
298

W
wanghaoxu 已提交
299 300
**错误码:**

C
crazy_hu 已提交
301
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
302

W
wanghaoxu 已提交
303 304 305
  | 错误码ID | 错误信息 |
  | -------- | ------ |
  | 1900011 | parcel memory alloc failed |
Z
zengyawen 已提交
306

Y
yangguangzhao 已提交
307
**示例:**
Y
yangguangzhao 已提交
308

Z
zengyawen 已提交
309
  ```
W
wanghaoxu 已提交
310 311 312
  let data = rpc.MessageSequence.create();
  try {
      data.setCapacity(100);
C
crazy_hu 已提交
313
      console.log("RpcClient: setCapacity is " + data.getCapacity());
W
wanghaoxu 已提交
314 315 316 317
  } catch(error) {
      console.info("rpc memory alloc fail, errorCode " + error.code);
      console.info("rpc memory alloc fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
318 319 320 321 322 323
  ```

### getWritableBytes

getWritableBytes(): number

W
wanghaoxu 已提交
324
获取MessageSequence的可写字节空间。
Z
zengyawen 已提交
325

Y
yangguangzhao 已提交
326
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
327

Y
yangguangzhao 已提交
328
**返回值:**
W
wangqinxiao 已提交
329

W
wanghaoxu 已提交
330 331
  | 类型 | 说明 |
  | ------ | ------ |
W
wanghaoxu 已提交
332
  | number | 获取到的MessageSequence的可写字节空间。以字节为单位。 |
Z
zengyawen 已提交
333

Y
yangguangzhao 已提交
334
**示例:**
Y
yangguangzhao 已提交
335

Z
zengyawen 已提交
336 337 338 339 340 341 342 343 344 345 346 347 348 349
  ```
  class Stub extends rpc.RemoteObject {
      onRemoteRequest(code, data, reply, option) {
          let getWritableBytes = data.getWritableBytes();
          console.log("RpcServer: getWritableBytes is " + getWritableBytes);
          return true;
      }
  }
  ```

### getReadableBytes

getReadableBytes(): number

W
wanghaoxu 已提交
350
获取MessageSequence的可读字节空间。
Z
zengyawen 已提交
351

Y
yangguangzhao 已提交
352
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
353

Y
yangguangzhao 已提交
354
**返回值:**
W
wangqinxiao 已提交
355

W
wanghaoxu 已提交
356 357
  | 类型 | 说明 |
  | ------ | ------- |
W
wanghaoxu 已提交
358
  | number | 获取到的MessageSequence的可读字节空间。以字节为单位。 |
Z
zengyawen 已提交
359

Y
yangguangzhao 已提交
360
**示例:**
Y
yangguangzhao 已提交
361

Z
zengyawen 已提交
362 363 364 365 366 367 368 369 370 371 372 373 374 375
  ```
  class Stub extends rpc.RemoteObject {
      onRemoteRequest(code, data, reply, option) {
          let result = data.getReadableBytes();
          console.log("RpcServer: getReadableBytes is " + result);
          return true;
      }
  }
  ```

### getReadPosition

getReadPosition(): number

W
wanghaoxu 已提交
376
获取MessageSequence的读位置。
Z
zengyawen 已提交
377

Y
yangguangzhao 已提交
378
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
379

Y
yangguangzhao 已提交
380
**返回值:**
W
wanghaoxu 已提交
381

W
wanghaoxu 已提交
382 383
  | 类型 | 说明 |
  | ------ | ------ |
W
wanghaoxu 已提交
384
  | number | 返回MessageSequence实例中的当前读取位置。 |
Z
zengyawen 已提交
385

Y
yangguangzhao 已提交
386
**示例:**
Y
yangguangzhao 已提交
387

Z
zengyawen 已提交
388
  ```
W
wanghaoxu 已提交
389
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
390 391 392 393 394 395 396 397
  let readPos = data.getReadPosition();
  console.log("RpcClient: readPos is " + readPos);
  ```

### getWritePosition

getWritePosition(): number

W
wanghaoxu 已提交
398
获取MessageSequence的写位置。
Z
zengyawen 已提交
399

Y
yangguangzhao 已提交
400
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
401

Y
yangguangzhao 已提交
402
**返回值:**
W
wangqinxiao 已提交
403

W
wanghaoxu 已提交
404 405
  | 类型 | 说明 |
  | ------ | ----- |
W
wanghaoxu 已提交
406
  | number | 返回MessageSequence实例中的当前写入位置。 |
Z
zengyawen 已提交
407

Y
yangguangzhao 已提交
408
**示例:**
Y
yangguangzhao 已提交
409

Z
zengyawen 已提交
410
  ```
W
wanghaoxu 已提交
411
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
412 413 414 415 416 417 418
  data.writeInt(10);
  let bwPos = data.getWritePosition();
  console.log("RpcClient: bwPos is " + bwPos);
  ```

### rewindRead

W
wanghaoxu 已提交
419
rewindRead(pos: number): void
Z
zengyawen 已提交
420 421 422

重新偏移读取位置到指定的位置。

Y
yangguangzhao 已提交
423
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
424

W
wanghaoxu 已提交
425
**参数:**
W
wangqinxiao 已提交
426

W
wanghaoxu 已提交
427 428
  | 参数名 | 类型 | 必填 | 说明 |
  | ------ | ------ | ---- | ------- |
W
wanghaoxu 已提交
429
  | pos    | number | 是   | 开始读取数据的目标位置。 |
Z
zengyawen 已提交
430

Y
yangguangzhao 已提交
431
**示例:**
Y
yangguangzhao 已提交
432

Z
zengyawen 已提交
433
  ```
W
wanghaoxu 已提交
434
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
435
  data.writeInt(12);
W
wanghaoxu 已提交
436
  data.writeString("sequence");
Z
zengyawen 已提交
437 438
  let number = data.readInt();
  console.log("RpcClient: number is " + number);
W
wanghaoxu 已提交
439 440 441 442 443 444
  try {
      data.rewindRead(0);
  } catch(error) {
      console.info("rpc rewind read data fail, errorCode " + error.code);
      console.info("rpc rewind read data fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
445 446 447 448 449 450
  let number2 = data.readInt();
  console.log("RpcClient: rewindRead is " + number2);
  ```

### rewindWrite

W
wanghaoxu 已提交
451
rewindWrite(pos: number): void
Z
zengyawen 已提交
452 453 454

重新偏移写位置到指定的位置。

Y
yangguangzhao 已提交
455
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
456

W
wanghaoxu 已提交
457
**参数:**
W
wangqinxiao 已提交
458

W
wanghaoxu 已提交
459 460
  | 参数名 | 类型 | 必填 | 说明 |
  | ------ | ------ | ---- | ----- |
W
wanghaoxu 已提交
461
  | pos    | number | 是   | 开始写入数据的目标位置。 |
Z
zengyawen 已提交
462

Y
yangguangzhao 已提交
463
**示例:**
Y
yangguangzhao 已提交
464

Z
zengyawen 已提交
465
  ```
W
wanghaoxu 已提交
466
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
467
  data.writeInt(4);
W
wanghaoxu 已提交
468 469 470 471 472 473
  try {
      data.rewindWrite(0);
  } catch(error) {
      console.info("rpc rewind read data fail, errorCode " + error.code);
      console.info("rpc rewind read data fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
474 475 476 477 478 479 480
  data.writeInt(5);
  let number = data.readInt();
  console.log("RpcClient: rewindWrite is: " + number);
  ```

### writeByte

W
wanghaoxu 已提交
481
writeByte(val: number): void
Z
zengyawen 已提交
482

W
wanghaoxu 已提交
483
将字节值写入MessageSequence实例。
Z
zengyawen 已提交
484

Y
yangguangzhao 已提交
485
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
486

W
wanghaoxu 已提交
487
**参数:**
W
wangqinxiao 已提交
488

W
wanghaoxu 已提交
489 490 491
  | 参数名 | 类型   | 必填 | 说明 |
  | ----- | ------ | ---- | ----- |
  | val | number | 是 | 要写入的字节值。 |
Z
zengyawen 已提交
492

W
wanghaoxu 已提交
493 494
**错误码:**

C
crazy_hu 已提交
495
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
496

W
wanghaoxu 已提交
497 498 499
  | 错误码ID | 错误信息 |
  | -------- | ------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
500

Y
yangguangzhao 已提交
501
**示例:**
Y
yangguangzhao 已提交
502

Z
zengyawen 已提交
503
  ```
W
wanghaoxu 已提交
504 505 506 507 508 509 510
  let data = rpc.MessageSequence.create();
  try {
      data.writeByte(2);
  } catch(error) {
    console.info("rpc write byte fail, errorCode " + error.code);
    console.info("rpc write byte fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
511 512 513 514 515 516
  ```

### readByte

readByte(): number

W
wanghaoxu 已提交
517
从MessageSequence实例读取字节值。
Z
zengyawen 已提交
518

Y
yangguangzhao 已提交
519
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
520

Y
yangguangzhao 已提交
521
**返回值:**
W
wangqinxiao 已提交
522

W
wanghaoxu 已提交
523 524
  | 类型   | 说明 |
  | ------ | ----- |
Y
yangguangzhao 已提交
525
  | number | 返回字节值。 |
Z
zengyawen 已提交
526

W
wanghaoxu 已提交
527 528
**错误码:**

C
crazy_hu 已提交
529
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
530

W
wanghaoxu 已提交
531 532 533
  | 错误码ID | 错误信息 |
  | ------- | --------  |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
534

Y
yangguangzhao 已提交
535
**示例:**
Y
yangguangzhao 已提交
536

Z
zengyawen 已提交
537
  ```
W
wanghaoxu 已提交
538 539 540 541 542 543 544 545 546 547 548 549 550 551
  let data = rpc.MessageSequence.create();
  try {
      data.writeByte(2);
  } catch(error) {
    console.info("rpc write byte fail, errorCode " + error.code);
    console.info("rpc write byte fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readByte();
      console.log("RpcClient: readByte is: " + ret);
  } catch(error) {
    console.info("rpc write byte fail, errorCode " + error.code);
    console.info("rpc write byte fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
552 553 554 555
  ```

### writeShort

W
wanghaoxu 已提交
556
writeShort(val: number): void
Z
zengyawen 已提交
557

W
wanghaoxu 已提交
558
将短整数值写入MessageSequence实例。
Z
zengyawen 已提交
559

Y
yangguangzhao 已提交
560
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
561

W
wanghaoxu 已提交
562
**参数:**
W
wangqinxiao 已提交
563

W
wanghaoxu 已提交
564 565 566
  | 参数名 | 类型   | 必填 | 说明 |
  | ------ | ------ | --- | --- |
  | val | number | 是 | 要写入的短整数值。 |
Z
zengyawen 已提交
567

W
wanghaoxu 已提交
568 569
**错误码:**

C
crazy_hu 已提交
570
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
571

W
wanghaoxu 已提交
572 573 574
  | 错误码ID | 错误信息 |
  | ------- | ------ |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
575

Y
yangguangzhao 已提交
576
**示例:**
Y
yangguangzhao 已提交
577

Z
zengyawen 已提交
578
  ```
W
wanghaoxu 已提交
579 580 581 582 583 584 585
  let data = rpc.MessageSequence.create();
  try {
      data.writeShort(8);
  } catch(error) {
      console.info("rpc write short fail, errorCode " + error.code);
      console.info("rpc write short fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
586 587 588 589 590 591
  ```

### readShort

readShort(): number

W
wanghaoxu 已提交
592
从MessageSequence实例读取短整数值。
Z
zengyawen 已提交
593

Y
yangguangzhao 已提交
594
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
595

Y
yangguangzhao 已提交
596
**返回值:**
W
wangqinxiao 已提交
597

W
wanghaoxu 已提交
598 599
  | 类型   | 说明           |
  | ------ | -------------- |
Y
yangguangzhao 已提交
600
  | number | 返回短整数值。 |
Z
zengyawen 已提交
601

W
wanghaoxu 已提交
602 603
**错误码:**

C
crazy_hu 已提交
604
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
605

W
wanghaoxu 已提交
606 607 608
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
609

Y
yangguangzhao 已提交
610
**示例:**
Y
yangguangzhao 已提交
611

Z
zengyawen 已提交
612
  ```
W
wanghaoxu 已提交
613 614 615 616 617 618 619 620 621 622 623 624 625 626
  let data = rpc.MessageSequence.create();
  try {
      data.writeShort(8);
  } catch(error) {
      console.info("rpc write short fail, errorCode " + error.code);
      console.info("rpc write short fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readShort(8);
  } catch(error) {
      console.info("rpc read short fail, errorCode " + error.code);
      console.info("rpc read short fail, errorMessage" + error.message);
  }
  console.log("RpcClient: readByte is: " + ret);
Z
zengyawen 已提交
627 628 629 630
  ```

### writeInt

W
wanghaoxu 已提交
631
writeInt(val: number): void
Z
zengyawen 已提交
632

W
wanghaoxu 已提交
633
将整数值写入MessageSequence实例。
Z
zengyawen 已提交
634

Y
yangguangzhao 已提交
635
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
636

W
wanghaoxu 已提交
637
**参数:**
W
wangqinxiao 已提交
638

W
wanghaoxu 已提交
639 640 641
  | 参数名 | 类型   | 必填 | 说明             |
  | ------ | ------ | ---- | ---------------- |
  | val    | number | 是   | 要写入的整数值。 |
Z
zengyawen 已提交
642

W
wanghaoxu 已提交
643 644
**错误码:**

C
crazy_hu 已提交
645
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
646

W
wanghaoxu 已提交
647 648 649
  | 错误码ID | 错误信息 |
  | -------- | ------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
650

Y
yangguangzhao 已提交
651
**示例:**
Y
yangguangzhao 已提交
652

Z
zengyawen 已提交
653
  ```
W
wanghaoxu 已提交
654 655 656 657 658 659 660
  let data = rpc.MessageSequence.create();
  try {
      data.writeInt(10);
  } catch(error) {
      console.info("rpc write int fail, errorCode " + error.code);
      console.info("rpc write int fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
661 662 663 664 665 666
  ```

### readInt

readInt(): number

W
wanghaoxu 已提交
667
从MessageSequence实例读取整数值。
Z
zengyawen 已提交
668

Y
yangguangzhao 已提交
669
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
670

Y
yangguangzhao 已提交
671
**返回值:**
W
wangqinxiao 已提交
672

W
wanghaoxu 已提交
673 674
  | 类型   | 说明         |
  | ------ | ------------ |
Y
yangguangzhao 已提交
675
  | number | 返回整数值。 |
Z
zengyawen 已提交
676

W
wanghaoxu 已提交
677 678
**错误码:**

C
crazy_hu 已提交
679
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
680

W
wanghaoxu 已提交
681 682 683
  | 错误码ID | 错误信息 |
  | ------- | ------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
684

Y
yangguangzhao 已提交
685
**示例:**
Y
yangguangzhao 已提交
686

Z
zengyawen 已提交
687
  ```
W
wanghaoxu 已提交
688 689 690 691 692 693 694 695 696
  let data = rpc.MessageSequence.create();
  try {
      data.writeInt(10);
  } catch(error) {
      console.info("rpc write int fail, errorCode " + error.code);
      console.info("rpc write int fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readInt();
C
crazy_hu 已提交
697
      console.log("RpcClient: readInt is " + ret);
W
wanghaoxu 已提交
698 699 700 701
  } catch(error) {
      console.info("rpc read int fail, errorCode " + error.code);
      console.info("rpc read int fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
702 703 704 705
  ```

### writeLong

W
wanghaoxu 已提交
706
writeLong(val: number): void
Z
zengyawen 已提交
707

W
wanghaoxu 已提交
708
将长整数值写入MessageSequence实例。
Z
zengyawen 已提交
709

Y
yangguangzhao 已提交
710
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
711

W
wanghaoxu 已提交
712
**参数:**
W
wangqinxiao 已提交
713

W
wanghaoxu 已提交
714 715 716
  | 参数名 | 类型   | 必填 | 说明             |
  | ------ | ------ | ---- | ---------------- |
  | val    | number | 是   | 要写入的长整数值 |
Z
zengyawen 已提交
717

W
wanghaoxu 已提交
718 719
**错误码:**

C
crazy_hu 已提交
720
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
721

W
wanghaoxu 已提交
722 723 724
  | 错误码ID | 错误信息 |
  | ------- | ------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
725

Y
yangguangzhao 已提交
726
**示例:**
Y
yangguangzhao 已提交
727

Z
zengyawen 已提交
728
  ```
W
wanghaoxu 已提交
729 730 731 732 733 734 735
  let data = rpc.MessageSequence.create();
  try {
      data.writeLong(10000);
  } catch(error) {
      console.info("rpc write long fail, errorCode " + error.code);
      console.info("rpc write long fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
736 737 738 739 740 741
  ```

### readLong

readLong(): number

W
wanghaoxu 已提交
742
从MessageSequence实例中读取长整数值。
Z
zengyawen 已提交
743

Y
yangguangzhao 已提交
744
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
745

Y
yangguangzhao 已提交
746
**返回值:**
W
wangqinxiao 已提交
747

W
wanghaoxu 已提交
748 749
  | 类型   | 说明           |
  | ------ | -------------- |
Y
yangguangzhao 已提交
750
  | number | 返回长整数值。 |
Z
zengyawen 已提交
751

W
wanghaoxu 已提交
752 753
**错误码:**

C
crazy_hu 已提交
754
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
755

W
wanghaoxu 已提交
756 757 758
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
759

Y
yangguangzhao 已提交
760
**示例:**
Y
yangguangzhao 已提交
761

Z
zengyawen 已提交
762
  ```
W
wanghaoxu 已提交
763 764 765 766 767 768 769 770 771
  let data = rpc.MessageSequence.create();
  try {
      data.writeLong(10000);
  } catch(error) {
      console.info("rpc write long fail, errorCode " + error.code);
      console.info("rpc write long fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readLong();
C
crazy_hu 已提交
772
      console.log("RpcClient: readLong is " + ret);
W
wanghaoxu 已提交
773 774 775 776
  } catch(error) {
      console.info("rpc read long fail, errorCode " + error.code);
      console.info("rpc read long fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
777 778 779 780
  ```

### writeFloat

W
wanghaoxu 已提交
781
writeFloat(val: number): void
Z
zengyawen 已提交
782

W
wanghaoxu 已提交
783
将浮点值写入MessageSequence实例。
Z
zengyawen 已提交
784

Y
yangguangzhao 已提交
785
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
786

W
wanghaoxu 已提交
787
**参数:**
W
wangqinxiao 已提交
788

W
wanghaoxu 已提交
789 790 791
  | 参数名 | 类型 | 必填 | 说明 |
  | ----- | ---- | ---- | ----- |
  | val | number | 是 | 要写入的浮点值。 |
Z
zengyawen 已提交
792

W
wanghaoxu 已提交
793 794
**错误码:**

C
crazy_hu 已提交
795
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
796

W
wanghaoxu 已提交
797 798 799
  | 错误码ID | 错误信息 |
  | ------- | ------- |
  | 1900010 | write data to message sequence failed |
Z
zengyawen 已提交
800

Y
yangguangzhao 已提交
801
**示例:**
Y
yangguangzhao 已提交
802

Z
zengyawen 已提交
803
  ```
W
wanghaoxu 已提交
804 805 806 807 808 809 810
  let data = rpc.MessageSequence.create();
  try {
      data.writeFloat(1.2);
  } catch(error) {
      console.info("rpc write float fail, errorCode " + error.code);
      console.info("rpc write float fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
811 812 813 814 815 816
  ```

### readFloat

readFloat(): number

W
wanghaoxu 已提交
817
从MessageSequence实例中读取浮点值。
Z
zengyawen 已提交
818

Y
yangguangzhao 已提交
819
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
820

Y
yangguangzhao 已提交
821
**返回值:**
W
wangqinxiao 已提交
822

W
wanghaoxu 已提交
823 824
  | 类型   | 说明         |
  | ------ | ------------ |
Y
yangguangzhao 已提交
825
  | number | 返回浮点值。 |
Z
zengyawen 已提交
826

W
wanghaoxu 已提交
827 828
**错误码:**

C
crazy_hu 已提交
829
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
830

W
wanghaoxu 已提交
831 832 833
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
834

Y
yangguangzhao 已提交
835
**示例:**
Y
yangguangzhao 已提交
836

Z
zengyawen 已提交
837
  ```
W
wanghaoxu 已提交
838 839 840 841 842 843 844 845 846
  let data = rpc.MessageSequence.create();
  try {
      data.writeFloat(1.2);
  } catch(error) {
      console.info("rpc write float fail, errorCode " + error.code);
      console.info("rpc write float fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readFloat();
C
crazy_hu 已提交
847
      console.log("RpcClient: readFloat is " + ret);
W
wanghaoxu 已提交
848 849 850 851
  } catch(error) {
      console.info("rpc read float fail, errorCode " + error.code);
      console.info("rpc read float fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
852 853 854 855
  ```

### writeDouble

W
wanghaoxu 已提交
856
writeDouble(val: number): void
Z
zengyawen 已提交
857

W
wanghaoxu 已提交
858
将双精度浮点值写入MessageSequence实例。
Z
zengyawen 已提交
859

Y
yangguangzhao 已提交
860
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
861

W
wanghaoxu 已提交
862
**参数:**
W
wangqinxiao 已提交
863

W
wanghaoxu 已提交
864 865 866
  | 参数名 | 类型 | 必填 | 说明 |
  | ------ | ------ | ---- | ------ |
  | val  number | 是 | 要写入的双精度浮点值。 |
Z
zengyawen 已提交
867

W
wanghaoxu 已提交
868 869
**错误码:**

C
crazy_hu 已提交
870
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
871

W
wanghaoxu 已提交
872 873 874
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
875

Y
yangguangzhao 已提交
876
**示例:**
Y
yangguangzhao 已提交
877

Z
zengyawen 已提交
878
  ```
W
wanghaoxu 已提交
879 880 881 882 883 884 885
  let data = rpc.MessageSequence.create();
  try {
      data.writeDouble(10.2);
  } catch(error) {
      console.info("rpc read float fail, errorCode " + error.code);
      console.info("rpc read float fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
886 887 888 889 890 891
  ```

### readDouble

readDouble(): number

W
wanghaoxu 已提交
892
从MessageSequence实例读取双精度浮点值。
Z
zengyawen 已提交
893

Y
yangguangzhao 已提交
894
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
895

Y
yangguangzhao 已提交
896
**返回值:**
W
wangqinxiao 已提交
897

W
wanghaoxu 已提交
898 899
  | 类型   | 说明               |
  | ------ | ------------------ |
Y
yangguangzhao 已提交
900
  | number | 返回双精度浮点值。 |
Z
zengyawen 已提交
901

W
wanghaoxu 已提交
902 903
**错误码:**

C
crazy_hu 已提交
904
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
905

W
wanghaoxu 已提交
906 907 908
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
909

Y
yangguangzhao 已提交
910
**示例:**
Y
yangguangzhao 已提交
911

Z
zengyawen 已提交
912
  ```
W
wanghaoxu 已提交
913 914 915 916 917 918 919 920 921
  let data = rpc.MessageSequence.create();
  try {
      data.writeDouble(10.2);
  } catch(error) {
      console.info("rpc write double fail, errorCode " + error.code);
      console.info("rpc write double fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readDouble();
C
crazy_hu 已提交
922
      console.log("RpcClient: readDouble is " + ret);
W
wanghaoxu 已提交
923 924 925 926
  } catch(error) {
      console.info("rpc read double fail, errorCode " + error.code);
      console.info("rpc read double fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
927 928 929 930
  ```

### writeBoolean

W
wanghaoxu 已提交
931
writeBoolean(val: boolean): void
Z
zengyawen 已提交
932

W
wanghaoxu 已提交
933
将布尔值写入MessageSequence实例。
Z
zengyawen 已提交
934

Y
yangguangzhao 已提交
935
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
936

W
wanghaoxu 已提交
937
**参数:**
W
wangqinxiao 已提交
938

W
wanghaoxu 已提交
939 940 941
  | 参数名 | 类型    | 必填 | 说明             |
  | ------ | ------- | ---- | ---------------- |
  | val    | boolean | 是   | 要写入的布尔值。 |
Z
zengyawen 已提交
942

W
wanghaoxu 已提交
943 944
**错误码:**

C
crazy_hu 已提交
945
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
946

W
wanghaoxu 已提交
947 948 949
  | 错误码ID | 错误信息 |
  | ------- | ------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
950

Y
yangguangzhao 已提交
951
**示例:**
Y
yangguangzhao 已提交
952

Z
zengyawen 已提交
953
  ```
W
wanghaoxu 已提交
954 955 956 957 958 959 960
  let data = rpc.MessageSequence.create();
  try {
      data.writeBoolean(false);
  } catch(error) {
      console.info("rpc write boolean fail, errorCode " + error.code);
      console.info("rpc write boolean fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
961 962 963 964 965 966
  ```

### readBoolean

readBoolean(): boolean

W
wanghaoxu 已提交
967
从MessageSequence实例读取布尔值。
Z
zengyawen 已提交
968

Y
yangguangzhao 已提交
969
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
970

Y
yangguangzhao 已提交
971
**返回值:**
W
wangqinxiao 已提交
972

W
wanghaoxu 已提交
973 974
  | 类型    | 说明                 |
  | ------- | -------------------- |
Y
yangguangzhao 已提交
975
  | boolean | 返回读取到的布尔值。 |
Z
zengyawen 已提交
976

W
wanghaoxu 已提交
977 978
**错误码:**

C
crazy_hu 已提交
979
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
980

W
wanghaoxu 已提交
981 982 983
  | 错误码ID | 错误信息 |
  | -------- | ------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
984

Y
yangguangzhao 已提交
985
**示例:**
Y
yangguangzhao 已提交
986

Z
zengyawen 已提交
987
  ```
W
wanghaoxu 已提交
988 989 990 991 992 993 994 995 996
  let data = rpc.MessageSequence.create();
  try {
      data.writeBoolean(false);
  } catch(error) {
      console.info("rpc write boolean fail, errorCode " + error.code);
      console.info("rpc write boolean fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readBoolean();
C
crazy_hu 已提交
997
      console.log("RpcClient: readBoolean is " + ret);
W
wanghaoxu 已提交
998 999 1000 1001
  } catch(error) {
      console.info("rpc read boolean fail, errorCode " + error.code);
      console.info("rpc read boolean fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1002 1003 1004 1005
  ```

### writeChar

W
wanghaoxu 已提交
1006
writeChar(val: number): void
Z
zengyawen 已提交
1007

W
wanghaoxu 已提交
1008
将单个字符值写入MessageSequence实例。
Z
zengyawen 已提交
1009

Y
yangguangzhao 已提交
1010
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1011

W
wanghaoxu 已提交
1012
**参数:**
W
wangqinxiao 已提交
1013

W
wanghaoxu 已提交
1014 1015 1016
  | 参数名 | 类型   | 必填 | 说明                 |
  | ------ | ------ | ---- | -------------------- |
  | val    | number | 是   | 要写入的单个字符值。 |
Z
zengyawen 已提交
1017

W
wanghaoxu 已提交
1018 1019
**错误码:**

C
crazy_hu 已提交
1020
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1021

W
wanghaoxu 已提交
1022 1023 1024
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1025

Y
yangguangzhao 已提交
1026
**示例:**
Y
yangguangzhao 已提交
1027

Z
zengyawen 已提交
1028
  ```
W
wanghaoxu 已提交
1029 1030 1031 1032 1033 1034 1035
  let data = rpc.MessageSequence.create();
  try {
      data.writeChar(97);
  } catch(error) {
      console.info("rpc write char fail, errorCode " + error.code);
      console.info("rpc write char fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1036 1037 1038 1039 1040 1041
  ```

### readChar

readChar(): number

W
wanghaoxu 已提交
1042
从MessageSequence实例中读取单个字符值。
Z
zengyawen 已提交
1043

Y
yangguangzhao 已提交
1044
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1045

Y
yangguangzhao 已提交
1046
**返回值:**
W
wangqinxiao 已提交
1047

W
wanghaoxu 已提交
1048 1049
  | 类型   | 说明 |
  | ------ | ---- |
Y
yangguangzhao 已提交
1050
  | number | 返回单个字符值。 |
Z
zengyawen 已提交
1051

W
wanghaoxu 已提交
1052 1053
**错误码:**

C
crazy_hu 已提交
1054
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1055

W
wanghaoxu 已提交
1056 1057 1058
  | 错误码ID | 错误信息 |
  | ------ | --------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
1059

Y
yangguangzhao 已提交
1060
**示例:**
Y
yangguangzhao 已提交
1061

Z
zengyawen 已提交
1062
  ```
W
wanghaoxu 已提交
1063 1064 1065 1066 1067 1068 1069 1070 1071
  let data = rpc.MessageSequence.create();
  try {
      data.writeChar(97);
  } catch(error) {
      console.info("rpc write char fail, errorCode " + error.code);
      console.info("rpc write char fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readChar();
C
crazy_hu 已提交
1072
      console.log("RpcClient: readChar is " + ret);
W
wanghaoxu 已提交
1073 1074 1075 1076
  } catch(error) {
      console.info("rpc read char fail, errorCode " + error.code);
      console.info("rpc read char fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1077 1078 1079 1080
  ```

### writeString

W
wanghaoxu 已提交
1081
writeString(val: string): void
Z
zengyawen 已提交
1082

W
wanghaoxu 已提交
1083
将字符串值写入MessageSequence实例。
Z
zengyawen 已提交
1084

Y
yangguangzhao 已提交
1085
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1086

W
wanghaoxu 已提交
1087
**参数:**
W
wangqinxiao 已提交
1088

W
wanghaoxu 已提交
1089 1090 1091
  | 参数名 | 类型   | 必填 | 说明                                      |
  | ------ | ------ | ---- | ----------------------------------------- |
  | val    | string | 是   | 要写入的字符串值,其长度应小于40960字节。 |
Z
zengyawen 已提交
1092

W
wanghaoxu 已提交
1093 1094
**错误码:**

C
crazy_hu 已提交
1095
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1096

W
wanghaoxu 已提交
1097 1098 1099
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1100

Y
yangguangzhao 已提交
1101
**示例:**
Y
yangguangzhao 已提交
1102

Z
zengyawen 已提交
1103
  ```
W
wanghaoxu 已提交
1104 1105 1106 1107 1108 1109 1110
  let data = rpc.MessageSequence.create();
  try {
      data.writeString('abc');
  } catch(error) {
      console.info("rpc write string fail, errorCode " + error.code);
      console.info("rpc write string fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1111 1112 1113 1114 1115 1116
  ```

### readString

readString(): string

W
wanghaoxu 已提交
1117
从MessageSequence实例读取字符串值。
Z
zengyawen 已提交
1118

Y
yangguangzhao 已提交
1119
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1120

Y
yangguangzhao 已提交
1121
**返回值:**
W
wangqinxiao 已提交
1122

W
wanghaoxu 已提交
1123 1124
  | 类型   | 说明           |
  | ------ | -------------- |
Y
yangguangzhao 已提交
1125
  | string | 返回字符串值。 |
Z
zengyawen 已提交
1126

W
wanghaoxu 已提交
1127 1128
**错误码:**

C
crazy_hu 已提交
1129
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1130

W
wanghaoxu 已提交
1131 1132 1133
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
1134

Y
yangguangzhao 已提交
1135
**示例:**
Y
yangguangzhao 已提交
1136

Z
zengyawen 已提交
1137
  ```
W
wanghaoxu 已提交
1138 1139 1140 1141 1142 1143 1144 1145 1146
  let data = rpc.MessageSequence.create();
  try {
      data.writeString('abc');
  } catch(error) {
      console.info("rpc write string fail, errorCode " + error.code);
      console.info("rpc write string fail, errorMessage" + error.message);
  }
  try {
      let ret = data.readString();
C
crazy_hu 已提交
1147
      console.log("RpcClient: readString is " + ret);
W
wanghaoxu 已提交
1148 1149 1150 1151
  } catch(error) {
      console.info("rpc read string fail, errorCode " + error.code);
      console.info("rpc read string fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1152 1153
  ```

W
wanghaoxu 已提交
1154
### writeParcelable
Z
zengyawen 已提交
1155

W
wanghaoxu 已提交
1156
writeParcelable(val: Parcelable): void
Z
zengyawen 已提交
1157

W
wanghaoxu 已提交
1158
将自定义序列化对象写入MessageSequence实例。
Z
zengyawen 已提交
1159

Y
yangguangzhao 已提交
1160
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1161

W
wanghaoxu 已提交
1162
**参数:**
W
wangqinxiao 已提交
1163

W
wanghaoxu 已提交
1164 1165
  | 参数名 | 类型 | 必填 | 说明 |
  | ------ | --------- | ---- | ------ |
W
wanghaoxu 已提交
1166
  | val    | Parcelable | 是   | 要写入的可序列对象。 |
Z
zengyawen 已提交
1167

W
wanghaoxu 已提交
1168 1169
**错误码:**

C
crazy_hu 已提交
1170
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1171

W
wanghaoxu 已提交
1172 1173 1174
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1175

Y
yangguangzhao 已提交
1176
**示例:**
Y
yangguangzhao 已提交
1177

Z
zengyawen 已提交
1178 1179
  ```
  class MySequenceable {
Y
yangguangzhao 已提交
1180 1181 1182
      num: number;
      str: string;
      constructor(num, str) {
Z
zengyawen 已提交
1183
          this.num = num;
Y
yangguangzhao 已提交
1184
          this.str = str;
Z
zengyawen 已提交
1185
      }
W
wanghaoxu 已提交
1186 1187 1188
      marshalling(messageSequence) {
          messageSequence.writeInt(this.num);
          messageSequence.writeString(this.str);
Z
zengyawen 已提交
1189 1190
          return true;
      }
W
wanghaoxu 已提交
1191 1192 1193
      unmarshalling(messageSequence) {
          this.num = messageSequence.readInt();
          this.str = messageSequence.readString();
Z
zengyawen 已提交
1194 1195 1196
          return true;
      }
  }
C
crazy_hu 已提交
1197
  let parcelable = new MySequenceable(1, "aaa");
W
wanghaoxu 已提交
1198 1199 1200 1201 1202 1203 1204
  let data = rpc.MessageSequence.create();
  try {
      data.writeParcelable(parcelable);
  } catch(error) {
      console.info("rpc write parcelable fail, errorCode " + error.code);
      console.info("rpc write parcelable fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1205 1206
  ```

W
wanghaoxu 已提交
1207
### readParcelable
Z
zengyawen 已提交
1208

W
wanghaoxu 已提交
1209
readParcelable(dataIn: Parcelable) : void
Z
zengyawen 已提交
1210

W
wanghaoxu 已提交
1211
从MessageSequence实例中读取成员变量到指定的对象(dataIn)。
Z
zengyawen 已提交
1212

Y
yangguangzhao 已提交
1213
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1214

W
wanghaoxu 已提交
1215
**参数:**
W
wangqinxiao 已提交
1216

W
wanghaoxu 已提交
1217 1218
  | 参数名 | 类型                      | 必填 | 说明                                      |
  | ------ | ------------------------- | ---- | ----------------------------------------- |
W
wanghaoxu 已提交
1219
  | dataIn | Parcelable | 是   | 需要从MessageSequence读取成员变量的对象。 |
Z
zengyawen 已提交
1220

W
wanghaoxu 已提交
1221 1222
**错误码:**

C
crazy_hu 已提交
1223
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1224

W
wanghaoxu 已提交
1225 1226 1227 1228
  | 错误码ID | 错误信息 |
  | -------- | ------- |
  | 1900010 | read data from message sequence failed |
  | 1900012 | call js callback function failed |
Z
zengyawen 已提交
1229

Y
yangguangzhao 已提交
1230
**示例:**
Y
yangguangzhao 已提交
1231

Z
zengyawen 已提交
1232 1233
  ```
  class MySequenceable {
Y
yangguangzhao 已提交
1234 1235 1236
      num: number;
      str: string;
      constructor(num, str) {
Z
zengyawen 已提交
1237
          this.num = num;
Y
yangguangzhao 已提交
1238
          this.str = str;
Z
zengyawen 已提交
1239
      }
W
wanghaoxu 已提交
1240 1241 1242
      marshalling(messageSequence) {
          messageSequence.writeInt(this.num);
          messageSequence.writeString(this.str);
Z
zengyawen 已提交
1243 1244
          return true;
      }
W
wanghaoxu 已提交
1245 1246 1247
      unmarshalling(messageSequence) {
          this.num = messageSequence.readInt();
          this.str = messageSequence.readString();
Z
zengyawen 已提交
1248 1249 1250
          return true;
      }
  }
C
crazy_hu 已提交
1251
  let parcelable = new MySequenceable(1, "aaa");
W
wanghaoxu 已提交
1252 1253
  let data = rpc.MessageSequence.create();
  data.writeParcelable(parcelable);
C
crazy_hu 已提交
1254
  let ret = new MySequenceable(0, "");
W
wanghaoxu 已提交
1255 1256
  try {
      data.readParcelable(ret);
C
crazy_hu 已提交
1257
  }catch(error) {
W
wanghaoxu 已提交
1258 1259 1260
      console.info("rpc read parcelable fail, errorCode " + error.code);
      console.info("rpc read parcelable fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1261 1262 1263 1264
  ```

### writeByteArray

W
wanghaoxu 已提交
1265
writeByteArray(byteArray: number[]): void
Z
zengyawen 已提交
1266

W
wanghaoxu 已提交
1267
将字节数组写入MessageSequence实例。
Z
zengyawen 已提交
1268

Y
yangguangzhao 已提交
1269
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1270

W
wanghaoxu 已提交
1271
**参数:**
W
wangqinxiao 已提交
1272

W
wanghaoxu 已提交
1273 1274 1275
  | 参数名    | 类型     | 必填 | 说明               |
  | --------- | -------- | ---- | ------------------ |
  | byteArray | number[] | 是   | 要写入的字节数组。 |
Z
zengyawen 已提交
1276

W
wanghaoxu 已提交
1277 1278
**错误码:**

C
crazy_hu 已提交
1279
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1280

W
wanghaoxu 已提交
1281 1282 1283
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1284

Y
yangguangzhao 已提交
1285
**示例:**
Y
yangguangzhao 已提交
1286

Z
zengyawen 已提交
1287
  ```
W
wanghaoxu 已提交
1288
  let data = rpc.MessageSequence.create();
Y
yangguangzhao 已提交
1289
  let ByteArrayVar = [1, 2, 3, 4, 5];
W
wanghaoxu 已提交
1290 1291 1292 1293 1294 1295
  try {
      data.writeByteArray(ByteArrayVar);
  } catch(error) {
      console.info("rpc write byteArray fail, errorCode " + error.code);
      console.info("rpc write byteArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1296 1297 1298 1299 1300 1301
  ```

### readByteArray

readByteArray(dataIn: number[]) : void

W
wanghaoxu 已提交
1302
从MessageSequence实例读取字节数组。
Z
zengyawen 已提交
1303

Y
yangguangzhao 已提交
1304
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1305

W
wanghaoxu 已提交
1306
**参数:**
W
wangqinxiao 已提交
1307

W
wanghaoxu 已提交
1308 1309 1310 1311
  | 参数名 | 类型     | 必填 | 说明               |
  | ------ | -------- | ---- | ------------------ |
  | dataIn | number[] | 是   | 要读取的字节数组。 |

W
wanghaoxu 已提交
1312 1313
**错误码:**

C
crazy_hu 已提交
1314
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1315

W
wanghaoxu 已提交
1316 1317 1318
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
1319

Y
yangguangzhao 已提交
1320
**示例:**
Y
yangguangzhao 已提交
1321

Z
zengyawen 已提交
1322
  ```
W
wanghaoxu 已提交
1323
  let data = rpc.MessageSequence.create();
Y
yangguangzhao 已提交
1324
  let ByteArrayVar = [1, 2, 3, 4, 5];
W
wanghaoxu 已提交
1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337
  try {
      data.writeByteArray(ByteArrayVar);
  } catch(error) {
      console.info("rpc write byteArray fail, errorCode " + error.code);
      console.info("rpc write byteArray fail, errorMessage" + error.message);
  }
  try {
      let array = new Array(5);
      data.readByteArray(array);
  } catch(error) {
      console.info("rpc write byteArray fail, errorCode " + error.code);
      console.info("rpc write byteArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1338 1339 1340 1341 1342 1343
  ```

### readByteArray

readByteArray(): number[]

W
wanghaoxu 已提交
1344
从MessageSequence实例中读取字节数组。
Z
zengyawen 已提交
1345

Y
yangguangzhao 已提交
1346
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1347

Y
yangguangzhao 已提交
1348
**返回值:**
W
wangqinxiao 已提交
1349

W
wanghaoxu 已提交
1350 1351
  | 类型     | 说明           |
  | -------- | -------------- |
Y
yangguangzhao 已提交
1352
  | number[] | 返回字节数组。 |
Z
zengyawen 已提交
1353

W
wanghaoxu 已提交
1354 1355
**错误码:**

C
crazy_hu 已提交
1356
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1357

W
wanghaoxu 已提交
1358 1359 1360
  | 错误码ID | 错误信息 |
  | -------- | ------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
1361

Y
yangguangzhao 已提交
1362
**示例:**
Y
yangguangzhao 已提交
1363

Z
zengyawen 已提交
1364
  ```
W
wanghaoxu 已提交
1365
  let data = rpc.MessageSequence.create();
C
crazy_hu 已提交
1366
  let byteArrayVar = [1, 2, 3, 4, 5];
W
wanghaoxu 已提交
1367
  try {
C
crazy_hu 已提交
1368
      data.writeByteArray(byteArrayVar);
W
wanghaoxu 已提交
1369 1370 1371 1372 1373 1374
  } catch(error) {
      console.info("rpc write byteArray fail, errorCode " + error.code);
      console.info("rpc write byteArray fail, errorMessage" + error.message);
  }
  try {
      let array = data.readByteArray();
C
crazy_hu 已提交
1375
      console.log("RpcClient: readByteArray is " + array);
W
wanghaoxu 已提交
1376 1377 1378 1379
  } catch(error) {
      console.info("rpc read byteArray fail, errorCode " + error.code);
      console.info("rpc read byteArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1380 1381 1382 1383
  ```

### writeShortArray

W
wanghaoxu 已提交
1384
writeShortArray(shortArray: number[]): void
Z
zengyawen 已提交
1385

W
wanghaoxu 已提交
1386
将短整数数组写入MessageSequence实例。
Z
zengyawen 已提交
1387

Y
yangguangzhao 已提交
1388
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1389

W
wanghaoxu 已提交
1390
**参数:**
W
wangqinxiao 已提交
1391

W
wanghaoxu 已提交
1392 1393 1394
  | 参数名     | 类型     | 必填 | 说明                 |
  | ---------- | -------- | ---- | -------------------- |
  | shortArray | number[] | 是   | 要写入的短整数数组。 |
Z
zengyawen 已提交
1395

W
wanghaoxu 已提交
1396 1397
**错误码:**

C
crazy_hu 已提交
1398
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1399

W
wanghaoxu 已提交
1400 1401 1402
  | 错误码ID | 错误信息 |
  | ----- | ----- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1403

Y
yangguangzhao 已提交
1404
**示例:**
Y
yangguangzhao 已提交
1405

Z
zengyawen 已提交
1406
  ```
W
wanghaoxu 已提交
1407 1408 1409 1410 1411 1412 1413
  let data = rpc.MessageSequence.create();
  try {
      data.writeShortArray([11, 12, 13]);
  } catch(error) {
      console.info("rpc read byteArray fail, errorCode " + error.code);
      console.info("rpc read byteArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1414 1415 1416 1417 1418 1419
  ```

### readShortArray

readShortArray(dataIn: number[]) : void

W
wanghaoxu 已提交
1420
从MessageSequence实例中读取短整数数组。
Z
zengyawen 已提交
1421

Y
yangguangzhao 已提交
1422
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1423

W
wanghaoxu 已提交
1424
**参数:**
W
wangqinxiao 已提交
1425

W
wanghaoxu 已提交
1426 1427 1428 1429
  | 参数名 | 类型     | 必填 | 说明                 |
  | ------ | -------- | ---- | -------------------- |
  | dataIn | number[] | 是   | 要读取的短整数数组。 |

W
wanghaoxu 已提交
1430 1431
**错误码:**

C
crazy_hu 已提交
1432
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1433

W
wanghaoxu 已提交
1434 1435 1436
  | 错误码ID | 错误信息 |
  | ------ | ------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
1437

Y
yangguangzhao 已提交
1438
**示例:**
Y
yangguangzhao 已提交
1439

Z
zengyawen 已提交
1440
  ```
W
wanghaoxu 已提交
1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454
  let data = rpc.MessageSequence.create();
  try {
      data.writeShortArray([11, 12, 13]);
  } catch(error) {
      console.info("rpc write shortArray fail, errorCode " + error.code);
      console.info("rpc write shortArray fail, errorMessage" + error.message);
  }
  try {
      let array = new Array(3);
      data.readShortArray(array);
  } catch(error) {
      console.info("rpc read shortArray fail, errorCode " + error.code);
      console.info("rpc read shortArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1455 1456 1457 1458 1459 1460
  ```

### readShortArray

readShortArray(): number[]

W
wanghaoxu 已提交
1461
从MessageSequence实例中读取短整数数组。
Z
zengyawen 已提交
1462

Y
yangguangzhao 已提交
1463
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1464

Y
yangguangzhao 已提交
1465
**返回值:**
W
wangqinxiao 已提交
1466

W
wanghaoxu 已提交
1467 1468
  | 类型     | 说明             |
  | -------- | ---------------- |
Y
yangguangzhao 已提交
1469
  | number[] | 返回短整数数组。 |
Z
zengyawen 已提交
1470

W
wanghaoxu 已提交
1471 1472
**错误码:**

C
crazy_hu 已提交
1473
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1474

W
wanghaoxu 已提交
1475 1476 1477
  | 错误码ID | 错误信息 |
  | -------- | ------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
1478

Y
yangguangzhao 已提交
1479
**示例:**
Y
yangguangzhao 已提交
1480

Z
zengyawen 已提交
1481
  ```
W
wanghaoxu 已提交
1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495
  let data = rpc.MessageSequence.create();
  try {
      data.writeShortArray([11, 12, 13]);
  } catch(error) {
      console.info("rpc write shortArray fail, errorCode " + error.code);
      console.info("rpc write shortArray fail, errorMessage" + error.message);
  }
  try {
      let array = data.readShortArray();
      console.log("RpcClient: readShortArray is " + array);
  } catch(error) {
      console.info("rpc read shortArray fail, errorCode " + error.code);
      console.info("rpc read shortArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1496 1497 1498 1499
  ```

### writeIntArray

W
wanghaoxu 已提交
1500
writeIntArray(intArray: number[]): void
Z
zengyawen 已提交
1501

W
wanghaoxu 已提交
1502
将整数数组写入MessageSequence实例。
Z
zengyawen 已提交
1503

Y
yangguangzhao 已提交
1504
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1505

W
wanghaoxu 已提交
1506
**参数:**
W
wangqinxiao 已提交
1507

W
wanghaoxu 已提交
1508 1509 1510
  | 参数名   | 类型     | 必填 | 说明               |
  | -------- | -------- | ---- | ------------------ |
  | intArray | number[] | 是   | 要写入的整数数组。 |
Z
zengyawen 已提交
1511

W
wanghaoxu 已提交
1512 1513
**错误码:**

C
crazy_hu 已提交
1514
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1515

W
wanghaoxu 已提交
1516 1517 1518
  | 错误码ID | 错误信息 |
  | ----- | --------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1519

Y
yangguangzhao 已提交
1520
**示例:**
Y
yangguangzhao 已提交
1521

Z
zengyawen 已提交
1522
  ```
W
wanghaoxu 已提交
1523 1524 1525 1526 1527 1528 1529
  let data = rpc.MessageSequence.create();
  try {
      data.writeIntArray([100, 111, 112]);
  } catch(error) {
      console.info("rpc write intArray fail, errorCode " + error.code);
      console.info("rpc write intArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1530 1531 1532 1533 1534 1535
  ```

### readIntArray

readIntArray(dataIn: number[]) : void

W
wanghaoxu 已提交
1536
从MessageSequence实例中读取整数数组。
Z
zengyawen 已提交
1537

Y
yangguangzhao 已提交
1538
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1539

W
wanghaoxu 已提交
1540
**参数:**
W
wangqinxiao 已提交
1541

W
wanghaoxu 已提交
1542 1543 1544 1545
  | 参数名 | 类型     | 必填 | 说明               |
  | ------ | -------- | ---- | ------------------ |
  | dataIn | number[] | 是   | 要读取的整数数组。 |

W
wanghaoxu 已提交
1546 1547
**错误码:**

C
crazy_hu 已提交
1548
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1549

W
wanghaoxu 已提交
1550 1551 1552
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
1553

Y
yangguangzhao 已提交
1554
**示例:**
Y
yangguangzhao 已提交
1555

Z
zengyawen 已提交
1556
  ```
W
wanghaoxu 已提交
1557 1558 1559 1560 1561 1562 1563
  let data = rpc.MessageSequence.create();
  try {
      data.writeIntArray([100, 111, 112]);
  } catch(error) {
      console.info("rpc write intArray fail, errorCode " + error.code);
      console.info("rpc write intArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1564
  let array = new Array(3);
W
wanghaoxu 已提交
1565 1566 1567 1568 1569 1570
  try {
      data.readIntArray(array);
  } catch(error) {
      console.info("rpc read intArray fail, errorCode " + error.code);
      console.info("rpc read intArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1571 1572 1573 1574 1575 1576
  ```

### readIntArray

readIntArray(): number[]

W
wanghaoxu 已提交
1577
从MessageSequence实例中读取整数数组。
Z
zengyawen 已提交
1578

Y
yangguangzhao 已提交
1579
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1580

Y
yangguangzhao 已提交
1581
**返回值:**
W
wangqinxiao 已提交
1582

W
wanghaoxu 已提交
1583 1584
  | 类型     | 说明           |
  | -------- | -------------- |
Y
yangguangzhao 已提交
1585
  | number[] | 返回整数数组。 |
Z
zengyawen 已提交
1586

W
wanghaoxu 已提交
1587 1588
**错误码:**

C
crazy_hu 已提交
1589
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1590

W
wanghaoxu 已提交
1591 1592 1593
  | 错误码ID | 错误信息 |
  | ----- | ------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
1594

Y
yangguangzhao 已提交
1595
**示例:**
Y
yangguangzhao 已提交
1596

Z
zengyawen 已提交
1597
  ```
W
wanghaoxu 已提交
1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611
  let data = rpc.MessageSequence.create();
  try {
      data.writeIntArray([100, 111, 112]);
  } catch(error) {
      console.info("rpc write intArray fail, errorCode " + error.code);
      console.info("rpc write intArray fail, errorMessage" + error.message);
  }
  try {
    let array = data.readIntArray();
    console.log("RpcClient: readIntArray is " + array);
  } catch(error) {
      console.info("rpc read intArray fail, errorCode " + error.code);
      console.info("rpc read intArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1612 1613 1614 1615
  ```

### writeLongArray

W
wanghaoxu 已提交
1616
writeLongArray(longArray: number[]): void
Z
zengyawen 已提交
1617

W
wanghaoxu 已提交
1618
将长整数数组写入MessageSequence实例。
Z
zengyawen 已提交
1619

Y
yangguangzhao 已提交
1620
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1621

W
wanghaoxu 已提交
1622
**参数:**
W
wangqinxiao 已提交
1623

W
wanghaoxu 已提交
1624 1625 1626
  | 参数名    | 类型     | 必填 | 说明                 |
  | --------- | -------- | ---- | -------------------- |
  | longArray | number[] | 是   | 要写入的长整数数组。 |
Z
zengyawen 已提交
1627

W
wanghaoxu 已提交
1628 1629
**错误码:**

C
crazy_hu 已提交
1630
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1631

W
wanghaoxu 已提交
1632 1633 1634
  | 错误码ID | 错误信息 |
  | -------  | ----- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1635

Y
yangguangzhao 已提交
1636
**示例:**
Y
yangguangzhao 已提交
1637

Z
zengyawen 已提交
1638
  ```
W
wanghaoxu 已提交
1639 1640 1641
  let data = rpc.MessageSequence.create();
  try {
      data.writeLongArray([1111, 1112, 1113]);
C
crazy_hu 已提交
1642
  }catch(error){
W
wanghaoxu 已提交
1643 1644 1645
      console.info("rpc write longArray fail, errorCode " + error.code);
      console.info("rpc write longArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1646 1647 1648 1649 1650 1651
  ```

### readLongArray

readLongArray(dataIn: number[]) : void

W
wanghaoxu 已提交
1652
从MessageSequence实例读取长整数数组。
Z
zengyawen 已提交
1653

Y
yangguangzhao 已提交
1654
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1655

W
wanghaoxu 已提交
1656
**参数:**
W
wangqinxiao 已提交
1657

W
wanghaoxu 已提交
1658 1659 1660 1661
  | 参数名 | 类型     | 必填 | 说明                 |
  | ------ | -------- | ---- | -------------------- |
  | dataIn | number[] | 是   | 要读取的长整数数组。 |

W
wanghaoxu 已提交
1662 1663
**错误码:**

C
crazy_hu 已提交
1664
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1665

W
wanghaoxu 已提交
1666 1667 1668
  | 错误码ID | 错误信息 |
  | ------- | ------ |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
1669

Y
yangguangzhao 已提交
1670
**示例:**
Y
yangguangzhao 已提交
1671

Z
zengyawen 已提交
1672
  ```
W
wanghaoxu 已提交
1673 1674 1675 1676 1677 1678 1679
  let data = rpc.MessageSequence.create();
  try {
      data.writeLongArray([1111, 1112, 1113]);
  } catch(error) {
      console.info("rpc write longArray fail, errorCode " + error.code);
      console.info("rpc write longArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1680
  let array = new Array(3);
W
wanghaoxu 已提交
1681 1682 1683 1684 1685 1686
  try {
      data.readLongArray(array);
  } catch(error) {
      console.info("rpc read longArray fail, errorCode " + error.code);
      console.info("rpc read longArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1687 1688 1689 1690 1691 1692
  ```

### readLongArray

readLongArray(): number[]

W
wanghaoxu 已提交
1693
从MessageSequence实例中读取长整数数组。
Z
zengyawen 已提交
1694

Y
yangguangzhao 已提交
1695
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1696

Y
yangguangzhao 已提交
1697
**返回值:**
W
wangqinxiao 已提交
1698

W
wanghaoxu 已提交
1699 1700
  | 类型     | 说明             |
  | -------- | ---------------- |
Y
yangguangzhao 已提交
1701
  | number[] | 返回长整数数组。 |
Z
zengyawen 已提交
1702

W
wanghaoxu 已提交
1703 1704
**错误码:**

C
crazy_hu 已提交
1705
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1706

W
wanghaoxu 已提交
1707 1708 1709
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
1710

Y
yangguangzhao 已提交
1711
**示例:**
Y
yangguangzhao 已提交
1712

Z
zengyawen 已提交
1713
  ```
W
wanghaoxu 已提交
1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727
  let data = rpc.MessageSequence.create();
  try {
      data.writeLongArray([1111, 1112, 1113]);
  } catch(error) {
      console.info("rpc write longArray fail, errorCode " + error.code);
      console.info("rpc write longArray fail, errorMessage" + error.message);
  }
  try {
      let array = data.readLongArray();
      console.log("RpcClient: readLongArray is " + array);
  } catch(error) {
      console.info("rpc read longArray fail, errorCode " + error.code);
      console.info("rpc read longArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1728 1729 1730 1731
  ```

### writeFloatArray

W
wanghaoxu 已提交
1732
writeFloatArray(floatArray: number[]): void
Z
zengyawen 已提交
1733

W
wanghaoxu 已提交
1734
将浮点数组写入MessageSequence实例。
Z
zengyawen 已提交
1735

Y
yangguangzhao 已提交
1736
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1737

W
wanghaoxu 已提交
1738
**参数:**
W
wangqinxiao 已提交
1739

W
wanghaoxu 已提交
1740 1741 1742
  | 参数名     | 类型     | 必填 | 说明                                                                                                                    |
  | ---------- | -------- | ---- | ----------------------------------------------------------------------------------------------------------------------- |
  | floatArray | number[] | 是   | 要写入的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |
Z
zengyawen 已提交
1743

W
wanghaoxu 已提交
1744 1745
**错误码:**

C
crazy_hu 已提交
1746
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1747

W
wanghaoxu 已提交
1748 1749 1750
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1751

Y
yangguangzhao 已提交
1752
**示例:**
Y
yangguangzhao 已提交
1753

Z
zengyawen 已提交
1754
  ```
W
wanghaoxu 已提交
1755 1756 1757 1758 1759 1760 1761
  let data = rpc.MessageSequence.create();
  try {
      data.writeFloatArray([1.2, 1.3, 1.4]);
  } catch(error) {
      console.info("rpc write floatArray fail, errorCode " + error.code);
      console.info("rpc write floatArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1762 1763 1764 1765 1766 1767
  ```

### readFloatArray

readFloatArray(dataIn: number[]) : void

W
wanghaoxu 已提交
1768
从MessageSequence实例中读取浮点数组。
Z
zengyawen 已提交
1769

Y
yangguangzhao 已提交
1770 1771
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
1772
**参数:**
W
wangqinxiao 已提交
1773

W
wanghaoxu 已提交
1774 1775 1776 1777
  | 参数名 | 类型     | 必填 | 说明                                                                                                                    |
  | ------ | -------- | ---- | ----------------------------------------------------------------------------------------------------------------------- |
  | dataIn | number[] | 是   | 要读取的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |

W
wanghaoxu 已提交
1778 1779
**错误码:**

C
crazy_hu 已提交
1780
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
Z
zengyawen 已提交
1781

W
wanghaoxu 已提交
1782 1783 1784
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
1785

Y
yangguangzhao 已提交
1786
**示例:**
Y
yangguangzhao 已提交
1787

Z
zengyawen 已提交
1788
  ```
W
wanghaoxu 已提交
1789 1790 1791
  let data = rpc.MessageSequence.create();
  try {
      data.writeFloatArray([1.2, 1.3, 1.4]);
C
crazy_hu 已提交
1792
  }catch(error){
W
wanghaoxu 已提交
1793 1794 1795
      console.info("rpc write floatArray fail, errorCode " + error.code);
      console.info("rpc write floatArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1796
  let array = new Array(3);
W
wanghaoxu 已提交
1797 1798 1799 1800 1801 1802
  try {
      data.readFloatArray(array);
  } catch(error) {
      console.info("rpc read floatArray fail, errorCode " + error.code);
      console.info("rpc read floatArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1803 1804 1805 1806 1807 1808
  ```

### readFloatArray

readFloatArray(): number[]

W
wanghaoxu 已提交
1809
从MessageSequence实例中读取浮点数组。
Z
zengyawen 已提交
1810

Y
yangguangzhao 已提交
1811
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1812

Y
yangguangzhao 已提交
1813
**返回值:**
W
wangqinxiao 已提交
1814

W
wanghaoxu 已提交
1815 1816
  | 类型     | 说明           |
  | -------- | -------------- |
Y
yangguangzhao 已提交
1817
  | number[] | 返回浮点数组。 |
Z
zengyawen 已提交
1818

W
wanghaoxu 已提交
1819 1820
**错误码:**

C
crazy_hu 已提交
1821
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1822

W
wanghaoxu 已提交
1823 1824 1825
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
1826

Y
yangguangzhao 已提交
1827
**示例:**
Y
yangguangzhao 已提交
1828

Z
zengyawen 已提交
1829
  ```
W
wanghaoxu 已提交
1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843
  let data = rpc.MessageSequence.create();
  try {
      data.writeFloatArray([1.2, 1.3, 1.4]);
  } catch(error) {
      console.info("rpc write floatArray fail, errorCode " + error.code);
      console.info("rpc write floatArray fail, errorMessage" + error.message);
  }
  try {
      let array = data.readFloatArray();
      console.log("RpcClient: readFloatArray is " + array);
  } catch(error) {
      console.info("rpc read floatArray fail, errorCode " + error.code);
      console.info("rpc read floatArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1844 1845 1846 1847
  ```

### writeDoubleArray

W
wanghaoxu 已提交
1848
writeDoubleArray(doubleArray: number[]): void
Z
zengyawen 已提交
1849

W
wanghaoxu 已提交
1850
将双精度浮点数组写入MessageSequence实例。
Z
zengyawen 已提交
1851

Y
yangguangzhao 已提交
1852
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1853

W
wanghaoxu 已提交
1854
**参数:**
W
wangqinxiao 已提交
1855

W
wanghaoxu 已提交
1856 1857 1858
  | 参数名      | 类型     | 必填 | 说明                     |
  | ----------- | -------- | ---- | ------------------------ |
  | doubleArray | number[] | 是   | 要写入的双精度浮点数组。 |
Z
zengyawen 已提交
1859

W
wanghaoxu 已提交
1860 1861
**错误码:**

C
crazy_hu 已提交
1862
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1863

W
wanghaoxu 已提交
1864 1865 1866
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1867

Y
yangguangzhao 已提交
1868
**示例:**
Y
yangguangzhao 已提交
1869

Z
zengyawen 已提交
1870
  ```
W
wanghaoxu 已提交
1871 1872 1873 1874 1875 1876 1877
  let data = rpc.MessageSequence.create();
  try {
      data.writeDoubleArray([11.1, 12.2, 13.3]);
  } catch(error) {
      console.info("rpc write doubleArray fail, errorCode " + error.code);
      console.info("rpc write doubleArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1878 1879 1880 1881 1882 1883
  ```

### readDoubleArray

readDoubleArray(dataIn: number[]) : void

W
wanghaoxu 已提交
1884
从MessageSequence实例中读取双精度浮点数组。
Z
zengyawen 已提交
1885

Y
yangguangzhao 已提交
1886
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1887

W
wanghaoxu 已提交
1888
**参数:**
W
wangqinxiao 已提交
1889

W
wanghaoxu 已提交
1890 1891 1892 1893
  | 参数名 | 类型     | 必填 | 说明                     |
  | ------ | -------- | ---- | ------------------------ |
  | dataIn | number[] | 是   | 要读取的双精度浮点数组。 |

W
wanghaoxu 已提交
1894 1895
**错误码:**

C
crazy_hu 已提交
1896
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1897

W
wanghaoxu 已提交
1898 1899 1900
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
1901

Y
yangguangzhao 已提交
1902
**示例:**
Y
yangguangzhao 已提交
1903

Z
zengyawen 已提交
1904
  ```
W
wanghaoxu 已提交
1905 1906 1907 1908 1909 1910 1911
  let data = rpc.MessageSequence.create();
  try {
      data.writeDoubleArray([11.1, 12.2, 13.3]);
  } catch(error) {
      console.info("rpc write doubleArray fail, errorCode " + error.code);
      console.info("rpc write doubleArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1912
  let array = new Array(3);
W
wanghaoxu 已提交
1913 1914 1915 1916 1917 1918
  try {
      data.readDoubleArray(array);
  } catch(error) {
      console.info("rpc read doubleArray fail, errorCode " + error.code);
      console.info("rpc read doubleArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1919 1920 1921 1922 1923 1924
  ```

### readDoubleArray

readDoubleArray(): number[]

W
wanghaoxu 已提交
1925
从MessageSequence实例读取双精度浮点数组。
Z
zengyawen 已提交
1926

Y
yangguangzhao 已提交
1927
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1928

Y
yangguangzhao 已提交
1929
**返回值:**
W
wangqinxiao 已提交
1930

W
wanghaoxu 已提交
1931 1932
  | 类型     | 说明                 |
  | -------- | -------------------- |
Y
yangguangzhao 已提交
1933
  | number[] | 返回双精度浮点数组。 |
Z
zengyawen 已提交
1934

W
wanghaoxu 已提交
1935 1936
**错误码:**

C
crazy_hu 已提交
1937
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
1938

W
wanghaoxu 已提交
1939 1940 1941
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
1942

Y
yangguangzhao 已提交
1943
**示例:**
Y
yangguangzhao 已提交
1944

Z
zengyawen 已提交
1945
  ```
W
wanghaoxu 已提交
1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959
  let data = rpc.MessageSequence.create();
  try {
      data.writeDoubleArray([11.1, 12.2, 13.3]);
  } catch(error) {
      console.info("rpc write doubleArray fail, errorCode " + error.code);
      console.info("rpc write doubleArray fail, errorMessage" + error.message);
  }
  try {
      let array = data.readDoubleArray();
      console.log("RpcClient: readDoubleArray is " + array);
  } catch(error) {
      console.info("rpc read doubleArray fail, errorCode " + error.code);
      console.info("rpc read doubleArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1960 1961 1962 1963
  ```

### writeBooleanArray

W
wanghaoxu 已提交
1964
writeBooleanArray(booleanArray: boolean[]): void
Z
zengyawen 已提交
1965

W
wanghaoxu 已提交
1966
将布尔数组写入MessageSequence实例。
Z
zengyawen 已提交
1967

Y
yangguangzhao 已提交
1968
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
1969

W
wanghaoxu 已提交
1970
**参数:**
W
wangqinxiao 已提交
1971

W
wanghaoxu 已提交
1972 1973 1974
  | 参数名       | 类型      | 必填 | 说明               |
  | ------------ | --------- | ---- | ------------------ |
  | booleanArray | boolean[] | 是   | 要写入的布尔数组。 |
Z
zengyawen 已提交
1975

W
wanghaoxu 已提交
1976 1977
**错误码:**

C
crazy_hu 已提交
1978
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
1979

W
wanghaoxu 已提交
1980 1981 1982
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
1983

Y
yangguangzhao 已提交
1984
**示例:**
Y
yangguangzhao 已提交
1985

Z
zengyawen 已提交
1986
  ```
W
wanghaoxu 已提交
1987 1988 1989 1990 1991 1992 1993
  let data = rpc.MessageSequence.create();
  try {
      data.writeBooleanArray([false, true, false]);
  } catch(error) {
      console.info("rpc write booleanArray fail, errorCode " + error.code);
      console.info("rpc write booleanArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
1994 1995 1996 1997 1998 1999
  ```

### readBooleanArray

readBooleanArray(dataIn: boolean[]) : void

W
wanghaoxu 已提交
2000
从MessageSequence实例中读取布尔数组。
Z
zengyawen 已提交
2001

Y
yangguangzhao 已提交
2002
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2003

W
wanghaoxu 已提交
2004
**参数:**
W
wangqinxiao 已提交
2005

W
wanghaoxu 已提交
2006 2007 2008 2009
  | 参数名 | 类型      | 必填 | 说明               |
  | ------ | --------- | ---- | ------------------ |
  | dataIn | boolean[] | 是   | 要读取的布尔数组。 |

W
wanghaoxu 已提交
2010 2011
**错误码:**

C
crazy_hu 已提交
2012
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2013

W
wanghaoxu 已提交
2014 2015 2016
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
2017

Y
yangguangzhao 已提交
2018
**示例:**
Y
yangguangzhao 已提交
2019

Z
zengyawen 已提交
2020
  ```
W
wanghaoxu 已提交
2021 2022 2023 2024 2025 2026 2027
  let data = rpc.MessageSequence.create();
  try {
      data.writeBooleanArray([false, true, false]);
  } catch(error) {
      console.info("rpc write booleanArray fail, errorCode " + error.code);
      console.info("rpc write booleanArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2028
  let array = new Array(3);
W
wanghaoxu 已提交
2029 2030 2031 2032 2033 2034
  try {
      data.readBooleanArray(array);
  } catch(error) {
      console.info("rpc read booleanArray fail, errorCode " + error.code);
      console.info("rpc read booleanArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2035 2036 2037 2038 2039 2040
  ```

### readBooleanArray

readBooleanArray(): boolean[]

W
wanghaoxu 已提交
2041
从MessageSequence实例中读取布尔数组。
Z
zengyawen 已提交
2042

Y
yangguangzhao 已提交
2043
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2044

Y
yangguangzhao 已提交
2045
**返回值:**
W
wangqinxiao 已提交
2046

W
wanghaoxu 已提交
2047 2048
  | 类型      | 说明           |
  | --------- | -------------- |
Y
yangguangzhao 已提交
2049 2050
  | boolean[] | 返回布尔数组。 |

W
wanghaoxu 已提交
2051 2052
**错误码:**

C
crazy_hu 已提交
2053
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2054

W
wanghaoxu 已提交
2055 2056 2057
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
2058 2059

**示例:**
Z
zengyawen 已提交
2060 2061

  ```
W
wanghaoxu 已提交
2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075
  let data = rpc.MessageSequence.create();
  try {
      data.writeBooleanArray([false, true, false]);
  } catch(error) {
      console.info("rpc write booleanArray fail, errorCode " + error.code);
      console.info("rpc write booleanArray fail, errorMessage" + error.message);
  }
  try {
      let array = data.readBooleanArray();
      console.log("RpcClient: readBooleanArray is " + array);
  } catch(error) {
      console.info("rpc read booleanArray fail, errorCode " + error.code);
      console.info("rpc read booleanArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2076 2077 2078 2079
  ```

### writeCharArray

W
wanghaoxu 已提交
2080
writeCharArray(charArray: number[]): void
Z
zengyawen 已提交
2081

W
wanghaoxu 已提交
2082
将单个字符数组写入MessageSequence实例。
Z
zengyawen 已提交
2083

Y
yangguangzhao 已提交
2084
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2085

W
wanghaoxu 已提交
2086
**参数:**
W
wangqinxiao 已提交
2087

W
wanghaoxu 已提交
2088 2089 2090
  | 参数名    | 类型     | 必填 | 说明                   |
  | --------- | -------- | ---- | ---------------------- |
  | charArray | number[] | 是   | 要写入的单个字符数组。 |
Z
zengyawen 已提交
2091

W
wanghaoxu 已提交
2092 2093
**错误码:**

C
crazy_hu 已提交
2094
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
2095

W
wanghaoxu 已提交
2096 2097 2098
  | 错误码ID | 错误信息 |
  | -------- | ------ |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
2099

Y
yangguangzhao 已提交
2100
**示例:**
Y
yangguangzhao 已提交
2101

Z
zengyawen 已提交
2102
  ```
W
wanghaoxu 已提交
2103 2104 2105 2106 2107 2108 2109
  let data = rpc.MessageSequence.create();
  try {
      data.writeCharArray([97, 98, 88]);
  } catch(error) {
      console.info("rpc write charArray fail, errorCode " + error.code);
      console.info("rpc write charArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2110 2111 2112 2113
  ```

### readCharArray

Y
yangguangzhao 已提交
2114
readCharArray(dataIn: number[]) : void
Z
zengyawen 已提交
2115

W
wanghaoxu 已提交
2116
从MessageSequence实例中读取单个字符数组。
Z
zengyawen 已提交
2117

Y
yangguangzhao 已提交
2118
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2119

W
wanghaoxu 已提交
2120
**参数:**
W
wangqinxiao 已提交
2121

W
wanghaoxu 已提交
2122 2123 2124 2125
  | 参数名 | 类型     | 必填 | 说明                   |
  | ------ | -------- | ---- | ---------------------- |
  | dataIn | number[] | 是   | 要读取的单个字符数组。 |

W
wanghaoxu 已提交
2126 2127
**错误码:**

C
crazy_hu 已提交
2128
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2129

W
wanghaoxu 已提交
2130 2131 2132
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
2133

Y
yangguangzhao 已提交
2134
**示例:**
Y
yangguangzhao 已提交
2135

Z
zengyawen 已提交
2136
  ```
W
wanghaoxu 已提交
2137 2138 2139 2140 2141 2142 2143
  let data = rpc.MessageSequence.create();
  try {
      data.writeCharArray([97, 98, 88]);
  } catch(error) {
      console.info("rpc write charArray fail, errorCode " + error.code);
      console.info("rpc write charArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2144
  let array = new Array(3);
W
wanghaoxu 已提交
2145 2146 2147 2148 2149 2150
  try {
      data.readCharArray(array);
  } catch(error) {
      console.info("rpc read charArray fail, errorCode " + error.code);
      console.info("rpc read charArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2151 2152 2153 2154
  ```

### readCharArray

Y
yangguangzhao 已提交
2155
readCharArray(): number[]
Z
zengyawen 已提交
2156

W
wanghaoxu 已提交
2157
从MessageSequence实例读取单个字符数组。
Z
zengyawen 已提交
2158

Y
yangguangzhao 已提交
2159
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2160

Y
yangguangzhao 已提交
2161
**返回值:**
W
wangqinxiao 已提交
2162

W
wanghaoxu 已提交
2163 2164
  | 类型     | 说明               |
  | -------- | ------------------ |
Y
yangguangzhao 已提交
2165
  | number[] | 返回单个字符数组。 |
Z
zengyawen 已提交
2166

W
wanghaoxu 已提交
2167 2168
**错误码:**

C
crazy_hu 已提交
2169
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2170

W
wanghaoxu 已提交
2171 2172 2173
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
2174

Y
yangguangzhao 已提交
2175
**示例:**
Y
yangguangzhao 已提交
2176

Z
zengyawen 已提交
2177
  ```
W
wanghaoxu 已提交
2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192
  let data = rpc.MessageSequence.create();
  try {
      data.writeCharArray([97, 98, 88]);
  } catch(error) {
      console.info("rpc write charArray fail, errorCode " + error.code);
      console.info("rpc write charArray fail, errorMessage" + error.message);
  }
  let array = new Array(3);
  try {
      let array = data.readCharArray();
      console.log("RpcClient: readCharArray is " + array);
  } catch(error) {
      console.info("rpc read charArray fail, errorCode " + error.code);
      console.info("rpc read charArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2193 2194 2195 2196
  ```

### writeStringArray

W
wanghaoxu 已提交
2197
writeStringArray(stringArray: string[]): void
Z
zengyawen 已提交
2198

W
wanghaoxu 已提交
2199
将字符串数组写入MessageSequence实例。
Z
zengyawen 已提交
2200

Y
yangguangzhao 已提交
2201
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2202

W
wanghaoxu 已提交
2203
**参数:**
W
wangqinxiao 已提交
2204

W
wanghaoxu 已提交
2205 2206 2207
  | 参数名      | 类型     | 必填 | 说明                                                    |
  | ----------- | -------- | ---- | ------------------------------------------------------- |
  | stringArray | string[] | 是   | 要写入的字符串数组,数组单个元素的长度应小于40960字节。 |
Z
zengyawen 已提交
2208

W
wanghaoxu 已提交
2209 2210
**错误码:**

C
crazy_hu 已提交
2211
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
2212

W
wanghaoxu 已提交
2213 2214 2215
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
2216

Y
yangguangzhao 已提交
2217
**示例:**
Y
yangguangzhao 已提交
2218

Z
zengyawen 已提交
2219
  ```
W
wanghaoxu 已提交
2220 2221 2222 2223 2224 2225 2226
  let data = rpc.MessageSequence.create();
  try {
      data.writeStringArray(["abc", "def"]);
  } catch(error) {
      console.info("rpc write stringArray fail, errorCode " + error.code);
      console.info("rpc write stringArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2227 2228 2229 2230 2231 2232
  ```

### readStringArray

readStringArray(dataIn: string[]) : void

W
wanghaoxu 已提交
2233
从MessageSequence实例读取字符串数组。
Z
zengyawen 已提交
2234

Y
yangguangzhao 已提交
2235
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2236

W
wanghaoxu 已提交
2237
**参数:**
W
wangqinxiao 已提交
2238

W
wanghaoxu 已提交
2239 2240 2241 2242
  | 参数名 | 类型     | 必填 | 说明                 |
  | ------ | -------- | ---- | -------------------- |
  | dataIn | string[] | 是   | 要读取的字符串数组。 |

W
wanghaoxu 已提交
2243 2244
**错误码:**

C
crazy_hu 已提交
2245
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2246

W
wanghaoxu 已提交
2247 2248 2249
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
2250

Y
yangguangzhao 已提交
2251
**示例:**
Y
yangguangzhao 已提交
2252

Z
zengyawen 已提交
2253
  ```
W
wanghaoxu 已提交
2254 2255 2256 2257 2258 2259 2260
  let data = rpc.MessageSequence.create();
  try {
      data.writeStringArray(["abc", "def"]);
  } catch(error) {
      console.info("rpc write stringArray fail, errorCode " + error.code);
      console.info("rpc write stringArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2261
  let array = new Array(2);
W
wanghaoxu 已提交
2262 2263 2264 2265 2266 2267
  try {
      data.readStringArray(array);
  } catch(error) {
      console.info("rpc read stringArray fail, errorCode " + error.code);
      console.info("rpc read stringArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2268 2269 2270 2271 2272 2273
  ```

### readStringArray

readStringArray(): string[]

W
wanghaoxu 已提交
2274
从MessageSequence实例读取字符串数组。
Z
zengyawen 已提交
2275

Y
yangguangzhao 已提交
2276
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2277

Y
yangguangzhao 已提交
2278
**返回值:**
W
wangqinxiao 已提交
2279

W
wanghaoxu 已提交
2280 2281
  | 类型     | 说明             |
  | -------- | ---------------- |
Y
yangguangzhao 已提交
2282
  | string[] | 返回字符串数组。 |
Z
zengyawen 已提交
2283

W
wanghaoxu 已提交
2284 2285
**错误码:**

C
crazy_hu 已提交
2286
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2287

W
wanghaoxu 已提交
2288 2289 2290
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
2291

Y
yangguangzhao 已提交
2292
**示例:**
Y
yangguangzhao 已提交
2293

Z
zengyawen 已提交
2294
  ```
W
wanghaoxu 已提交
2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308
  let data = rpc.MessageSequence.create();
  try {
      data.writeStringArray(["abc", "def"]);
  } catch(error) {
      console.info("rpc write stringArray fail, errorCode " + error.code);
      console.info("rpc write stringArray fail, errorMessage" + error.message);
  }
  try {
      let array = data.readStringArray();
      console.log("RpcClient: readStringArray is " + array);
  } catch(error) {
      console.info("rpc read stringArray fail, errorCode " + error.code);
      console.info("rpc read stringArray fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2309 2310
  ```

W
wanghaoxu 已提交
2311
### writeNoException
Z
zengyawen 已提交
2312 2313 2314

writeNoException(): void

W
wanghaoxu 已提交
2315
向MessageSequence写入“指示未发生异常”的信息。
Z
zengyawen 已提交
2316

Y
yangguangzhao 已提交
2317
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2318

W
wanghaoxu 已提交
2319 2320
**错误码:**

C
crazy_hu 已提交
2321
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2322

W
wanghaoxu 已提交
2323 2324 2325
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
W
wanghaoxu 已提交
2326

Y
yangguangzhao 已提交
2327
**示例:**
Y
yangguangzhao 已提交
2328

Z
zengyawen 已提交
2329 2330 2331 2332 2333
  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
C
crazy_hu 已提交
2334

Z
zengyawen 已提交
2335 2336 2337
      onRemoteRequest(code, data, reply, option) {
          if (code === 1) {
              console.log("RpcServer: onRemoteRequest called");
W
wanghaoxu 已提交
2338 2339 2340 2341 2342 2343
              try {
                  reply.writeNoException();
              } catch(error) {
                  console.info("rpc write no exception fail, errorCode " + error.code);
                  console.info("rpc write no exception fail, errorMessage" + error.message);
              }
Z
zengyawen 已提交
2344 2345 2346 2347 2348 2349 2350 2351 2352
              return true;
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
      }
  }
  ```

W
wanghaoxu 已提交
2353
### readException
Z
zengyawen 已提交
2354 2355 2356

readException(): void

W
wanghaoxu 已提交
2357
从MessageSequence中读取异常。
Z
zengyawen 已提交
2358

Y
yangguangzhao 已提交
2359
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2360

W
wanghaoxu 已提交
2361 2362
**错误码:**

C
crazy_hu 已提交
2363
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2364

W
wanghaoxu 已提交
2365 2366 2367
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
2368

Y
yangguangzhao 已提交
2369
**示例:**
Y
yangguangzhao 已提交
2370

Z
zengyawen 已提交
2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
Y
yangguangzhao 已提交
2387 2388
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
Z
zengyawen 已提交
2389 2390 2391
  };
  FA.connectAbility(want, connect);
  let option = new rpc.MessageOption();
W
wanghaoxu 已提交
2392 2393
  let data = rpc.MessageSequence.create();
  let reply = rpc.MessageSequence.create();
Z
zengyawen 已提交
2394 2395
  data.writeInt(1);
  data.writeString("hello");
W
wanghaoxu 已提交
2396
  proxy.sendMessageRequest(1, data, reply, option)
Z
zengyawen 已提交
2397 2398
      .then(function(errCode) {
          if (errCode === 0) {
W
wanghaoxu 已提交
2399
              console.log("sendMessageRequest got result");
W
wanghaoxu 已提交
2400 2401 2402 2403 2404 2405
              try {
                  reply.readException();
              } catch(error) {
                  console.info("rpc read exception fail, errorCode " + error.code);
                  console.info("rpc read no exception fail, errorMessage" + error.message);
              }
Z
zengyawen 已提交
2406 2407 2408
              let msg = reply.readString();
              console.log("RPCTest: reply msg: " + msg);
          } else {
W
wanghaoxu 已提交
2409
              console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode);
Z
zengyawen 已提交
2410 2411
          }
      }).catch(function(e) {
W
wanghaoxu 已提交
2412
          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
Z
zengyawen 已提交
2413
      }).finally (() => {
W
wanghaoxu 已提交
2414
          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
Z
zengyawen 已提交
2415 2416 2417 2418 2419
          data.reclaim();
          reply.reclaim();
      });
  ```

W
wanghaoxu 已提交
2420
### writeParcelableArray
Z
zengyawen 已提交
2421

W
wanghaoxu 已提交
2422
writeParcelableArray(parcelableArray: Parcelable[]): void
Z
zengyawen 已提交
2423

W
wanghaoxu 已提交
2424
将可序列化对象数组写入MessageSequence实例。
Z
zengyawen 已提交
2425

Y
yangguangzhao 已提交
2426
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2427

W
wanghaoxu 已提交
2428
**参数:**
W
wangqinxiao 已提交
2429

W
wanghaoxu 已提交
2430 2431 2432
  | 参数名          | 类型         | 必填 | 说明                       |
  | --------------- | ------------ | ---- | -------------------------- |
  | parcelableArray | Parcelable[] | 是   | 要写入的可序列化对象数组。 |
Z
zengyawen 已提交
2433

W
wanghaoxu 已提交
2434 2435
**错误码:**

C
crazy_hu 已提交
2436
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
2437

W
wanghaoxu 已提交
2438 2439 2440
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
2441

Y
yangguangzhao 已提交
2442
**示例:**
Y
yangguangzhao 已提交
2443

Z
zengyawen 已提交
2444
  ```
W
wanghaoxu 已提交
2445
  class MyParcelable {
Y
yangguangzhao 已提交
2446 2447 2448
      num: number;
      str: string;
      constructor(num, str) {
Z
zengyawen 已提交
2449
          this.num = num;
Y
yangguangzhao 已提交
2450
          this.str = str;
Z
zengyawen 已提交
2451
      }
W
wanghaoxu 已提交
2452 2453 2454
      marshalling(messageSequence) {
          messageSequence.writeInt(this.num);
          messageSequence.writeString(this.str);
Z
zengyawen 已提交
2455 2456
          return true;
      }
W
wanghaoxu 已提交
2457 2458 2459
      unmarshalling(messageSequence) {
          this.num = messageSequence.readInt();
          this.str = messageSequence.readString();
Z
zengyawen 已提交
2460 2461 2462
          return true;
      }
  }
W
wanghaoxu 已提交
2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473
  let parcelable = new MyParcelable(1, "aaa");
  let parcelable2 = new MyParcelable(2, "bbb");
  let parcelable3 = new MyParcelable(3, "ccc");
  let a = [parcelable, parcelable2, parcelable3];
  let data = rpc.MessageSequence.create();
  try {
      data.writeParcelableArray(a);
  } catch(error) {
      console.info("rpc write parcelable array fail, errorCode " + error.code);
      console.info("rpc write parcelable array fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2474 2475
  ```

W
wanghaoxu 已提交
2476
### readParcelableArray
Z
zengyawen 已提交
2477

W
wanghaoxu 已提交
2478
readParcelableArray(parcelableArray: Parcelable[]): void
Z
zengyawen 已提交
2479

W
wanghaoxu 已提交
2480
从MessageSequence实例读取可序列化对象数组。
Z
zengyawen 已提交
2481

Y
yangguangzhao 已提交
2482
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2483

W
wanghaoxu 已提交
2484
**参数:**
W
wangqinxiao 已提交
2485

W
wanghaoxu 已提交
2486 2487 2488 2489
  | 参数名          | 类型         | 必填 | 说明                       |
  | --------------- | ------------ | ---- | -------------------------- |
  | parcelableArray | Parcelable[] | 是   | 要读取的可序列化对象数组。 |

W
wanghaoxu 已提交
2490 2491
**错误码:**

C
crazy_hu 已提交
2492
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2493

W
wanghaoxu 已提交
2494 2495 2496 2497
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
  | 1900012 | call js callback function failed |
Z
zengyawen 已提交
2498

Y
yangguangzhao 已提交
2499
**示例:**
Y
yangguangzhao 已提交
2500

Z
zengyawen 已提交
2501
  ```
W
wanghaoxu 已提交
2502
  class MyParcelable {
Y
yangguangzhao 已提交
2503 2504 2505
      num: number;
      str: string;
      constructor(num, str) {
Z
zengyawen 已提交
2506
          this.num = num;
Y
yangguangzhao 已提交
2507
          this.str = str;
Z
zengyawen 已提交
2508
      }
W
wanghaoxu 已提交
2509 2510 2511
      marshalling(messageSequence) {
          messageSequence.writeInt(this.num);
          messageSequence.writeString(this.str);
Z
zengyawen 已提交
2512 2513
          return true;
      }
W
wanghaoxu 已提交
2514 2515 2516
      unmarshalling(messageSequence) {
          this.num = messageSequence.readInt();
          this.str = messageSequence.readString();
Z
zengyawen 已提交
2517 2518 2519
          return true;
      }
  }
W
wanghaoxu 已提交
2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534
  let parcelable = new MyParcelable(1, "aaa");
  let parcelable2 = new MyParcelable(2, "bbb");
  let parcelable3 = new MyParcelable(3, "ccc");
  let a = [parcelable, parcelable2, parcelable3];
  let data = rpc.MessageSequence.create();
  let result = data.writeParcelableArray(a);
  console.log("RpcClient: writeParcelableArray is " + result);
  let b = [new MyParcelable(0, ""), new MyParcelable(0, ""), new MyParcelable(0, "")];
  try {
      data.readParcelableArray(b);
  } catch(error) {
      console.info("rpc read parcelable array fail, errorCode " + error.code);
      console.info("rpc read parcelable array fail, errorMessage" + error.message);
  }
  data.readParcelableArray(b);
Z
zengyawen 已提交
2535 2536
  ```

W
wanghaoxu 已提交
2537
### writeRemoteObjectArray
Z
zengyawen 已提交
2538

W
wanghaoxu 已提交
2539
writeRemoteObjectArray(objectArray: IRemoteObject[]): void
Z
zengyawen 已提交
2540

W
wanghaoxu 已提交
2541
将IRemoteObject对象数组写入MessageSequence。
Z
zengyawen 已提交
2542

Y
yangguangzhao 已提交
2543
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2544

W
wanghaoxu 已提交
2545
**参数:**
W
wanghaoxu 已提交
2546 2547 2548
  | 参数名      | 类型            | 必填 | 说明                                           |
  | ----------- | --------------- | ---- | ---------------------------------------------- |
  | objectArray | IRemoteObject[] | 是   | 要写入MessageSequence的IRemoteObject对象数组。 |
Z
zengyawen 已提交
2549

W
wanghaoxu 已提交
2550 2551
**错误码:**

C
crazy_hu 已提交
2552
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
2553

W
wanghaoxu 已提交
2554 2555 2556
  | 错误码ID | 错误信息 |
  | ------- | ------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
2557

Y
yangguangzhao 已提交
2558
**示例:**
Y
yangguangzhao 已提交
2559

Z
zengyawen 已提交
2560 2561 2562 2563
  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
W
wanghaoxu 已提交
2564
          this.modifyLocalInterface(this, descriptor);
Y
yangguangzhao 已提交
2565
      }
C
crazy_hu 已提交
2566

Y
yangguangzhao 已提交
2567 2568 2569
      asObject(): rpc.IRemoteObject {
          return this;
      }
Z
zengyawen 已提交
2570 2571
  }
  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
W
wanghaoxu 已提交
2572
  let data = rpc.MessageSequence.create();
Z
zengyawen 已提交
2573
  let result = data.writeRemoteObjectArray(a);
W
wanghaoxu 已提交
2574 2575 2576 2577 2578 2579
  try {
      data.writeRemoteObjectArray(a);
  } catch(error) {
      console.info("rpc write remote object array fail, errorCode " + error.code);
      console.info("rpc write remote object array fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2580 2581 2582
  console.log("RpcClient: writeRemoteObjectArray is " + result);
  ```

W
wanghaoxu 已提交
2583
### readRemoteObjectArray
Z
zengyawen 已提交
2584 2585 2586

readRemoteObjectArray(objects: IRemoteObject[]): void

W
wanghaoxu 已提交
2587
从MessageSequence读取IRemoteObject对象数组。
Z
zengyawen 已提交
2588

Y
yangguangzhao 已提交
2589
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2590

W
wanghaoxu 已提交
2591
**参数:**
W
wangqinxiao 已提交
2592

W
wanghaoxu 已提交
2593 2594 2595 2596
  | 参数名  | 类型            | 必填 | 说明                                           |
  | ------- | --------------- | ---- | ---------------------------------------------- |
  | objects | IRemoteObject[] | 是   | 从MessageSequence读取的IRemoteObject对象数组。 |

W
wanghaoxu 已提交
2597 2598
**错误码:**

C
crazy_hu 已提交
2599
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2600

W
wanghaoxu 已提交
2601 2602 2603
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
Z
zengyawen 已提交
2604

Y
yangguangzhao 已提交
2605
**示例:**
Y
yangguangzhao 已提交
2606

Z
zengyawen 已提交
2607
  ```
Y
yangguangzhao 已提交
2608 2609
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
2610
          console.log("server died");
Y
yangguangzhao 已提交
2611 2612
      }
  }
Z
zengyawen 已提交
2613 2614 2615
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
W
wanghaoxu 已提交
2616
          this.modifyLocalInterface(this, descriptor);
Y
yangguangzhao 已提交
2617
      }
C
crazy_hu 已提交
2618

Y
yangguangzhao 已提交
2619 2620 2621
      asObject(): rpc.IRemoteObject {
          return this;
      }
Z
zengyawen 已提交
2622 2623
  }
  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
W
wanghaoxu 已提交
2624 2625
  let data = rpc.MessageSequence.create();
  data.writeRemoteObjectArray(a);
Z
zengyawen 已提交
2626
  let b = new Array(3);
W
wanghaoxu 已提交
2627 2628 2629 2630 2631 2632
  try {
      data.readRemoteObjectArray(b);
  } catch(error) {
      console.info("rpc read remote object array fail, errorCode " + error.code);
      console.info("rpc read remote object array fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2633 2634 2635
  data.readRemoteObjectArray(b);
  ```

W
wanghaoxu 已提交
2636
### readRemoteObjectArray
Z
zengyawen 已提交
2637 2638 2639

readRemoteObjectArray(): IRemoteObject[]

W
wanghaoxu 已提交
2640
从MessageSequence读取IRemoteObject对象数组。
Z
zengyawen 已提交
2641

Y
yangguangzhao 已提交
2642
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2643

Y
yangguangzhao 已提交
2644
**返回值:**
W
wangqinxiao 已提交
2645

W
wanghaoxu 已提交
2646 2647
  | 类型            | 说明                        |
  | --------------- | --------------------------- |
Y
yangguangzhao 已提交
2648
  | IRemoteObject[] | 返回IRemoteObject对象数组。 |
Z
zengyawen 已提交
2649

W
wanghaoxu 已提交
2650 2651
**错误码:**

C
crazy_hu 已提交
2652
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2653

W
wanghaoxu 已提交
2654 2655 2656
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
2657

Y
yangguangzhao 已提交
2658
**示例:**
Y
yangguangzhao 已提交
2659

Z
zengyawen 已提交
2660 2661 2662 2663
  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
W
wanghaoxu 已提交
2664
          this.modifyLocalInterface(this, descriptor);
Y
yangguangzhao 已提交
2665
      }
C
crazy_hu 已提交
2666
 
Y
yangguangzhao 已提交
2667 2668 2669
      asObject(): rpc.IRemoteObject {
          return this;
      }
Z
zengyawen 已提交
2670 2671
  }
  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
W
wanghaoxu 已提交
2672 2673 2674 2675
  let data = rpc.MessageSequence.create();
  data.writeRemoteObjectArray(a);
  try {
      let b = data.readRemoteObjectArray();
C
crazy_hu 已提交
2676
      console.log("RpcClient: readRemoteObjectArray is " + b);
W
wanghaoxu 已提交
2677 2678 2679 2680
  } catch(error) {
      console.info("rpc read remote object array fail, errorCode " + error.code);
      console.info("rpc read remote object array fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2681 2682 2683 2684 2685 2686 2687 2688 2689
  ```


### closeFileDescriptor<sup>8+</sup>

static closeFileDescriptor(fd: number): void

关闭给定的文件描述符。

Y
yangguangzhao 已提交
2690
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2691

W
wanghaoxu 已提交
2692
**参数:**
W
wangqinxiao 已提交
2693

W
wanghaoxu 已提交
2694 2695 2696 2697
  | 参数名 | 类型   | 必填 | 说明                 |
  | ------ | ------ | ---- | -------------------- |
  | fd     | number | 是   | 要关闭的文件描述符。 |

Y
yangguangzhao 已提交
2698
**示例:**
Y
yangguangzhao 已提交
2699

Z
zengyawen 已提交
2700 2701 2702 2703
  ```
  import fileio from '@ohos.fileio';
  let filePath = "path/to/file";
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
W
wanghaoxu 已提交
2704 2705 2706 2707 2708 2709
  try {
      rpc.MessageSequence.closeFileDescriptor(fd);
  } catch(error) {
      console.info("rpc close file descriptor fail, errorCode " + error.code);
      console.info("rpc close file descriptor fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2710 2711
  ```

W
wanghaoxu 已提交
2712
### dupFileDescriptor
Z
zengyawen 已提交
2713 2714 2715 2716 2717

static dupFileDescriptor(fd: number) :number

复制给定的文件描述符。

Y
yangguangzhao 已提交
2718
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2719

W
wanghaoxu 已提交
2720
**参数:**
W
wangqinxiao 已提交
2721

W
wanghaoxu 已提交
2722 2723 2724
  | 参数名 | 类型   | 必填 | 说明                     |
  | ------ | ------ | ---- | ------------------------ |
  | fd     | number | 是   | 表示已存在的文件描述符。 |
Z
zengyawen 已提交
2725

Y
yangguangzhao 已提交
2726
**返回值:**
W
wangqinxiao 已提交
2727

W
wanghaoxu 已提交
2728 2729
  | 类型   | 说明                 |
  | ------ | -------------------- |
Y
yangguangzhao 已提交
2730
  | number | 返回新的文件描述符。 |
Z
zengyawen 已提交
2731

W
wanghaoxu 已提交
2732 2733
**错误码:**

C
crazy_hu 已提交
2734
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2735

W
wanghaoxu 已提交
2736 2737 2738
  | 错误码ID | 错误信息 |
  | ------- | ------- |
  | 1900013 | call os dup function failed |
W
wanghaoxu 已提交
2739

Y
yangguangzhao 已提交
2740
**示例:**
Y
yangguangzhao 已提交
2741

Z
zengyawen 已提交
2742 2743 2744 2745
  ```
  import fileio from '@ohos.fileio';
  let filePath = "path/to/file";
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
W
wanghaoxu 已提交
2746 2747 2748 2749 2750 2751
  try {
      let newFd = rpc.MessageSequence.dupFileDescriptor(fd);
  } catch(error) {
      console.info("rpc dup file descriptor fail, errorCode " + error.code);
      console.info("rpc dup file descriptor fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2752 2753
  ```

W
wanghaoxu 已提交
2754
### containFileDescriptors
Z
zengyawen 已提交
2755 2756 2757

containFileDescriptors(): boolean

W
wanghaoxu 已提交
2758
检查此MessageSequence对象是否包含文件描述符。
Z
zengyawen 已提交
2759

Y
yangguangzhao 已提交
2760
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2761

Y
yangguangzhao 已提交
2762
**返回值:**
W
wangqinxiao 已提交
2763

W
wanghaoxu 已提交
2764 2765 2766
  | 类型    | 说明                                                                 |
  | ------- | -------------------------------------------------------------------- |
  | boolean | 如果此MessageSequence对象包含文件描述符,则返回true;否则返回false。 |
Z
zengyawen 已提交
2767

Y
yangguangzhao 已提交
2768
**示例:**
Y
yangguangzhao 已提交
2769

W
wanghaoxu 已提交
2770

Z
zengyawen 已提交
2771 2772
  ```
  import fileio from '@ohos.fileio';
W
wanghaoxu 已提交
2773
  let sequence = new rpc.MessageSequence();
Z
zengyawen 已提交
2774
  let filePath = "path/to/file";
W
wanghaoxu 已提交
2775
  let r1 = sequence.containFileDescriptors();
Z
zengyawen 已提交
2776
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
W
wanghaoxu 已提交
2777 2778 2779 2780 2781 2782 2783 2784
  try {
      sequence.writeFileDescriptor(fd);
  } catch(error) {
      console.info("rpc write file descriptor fail, errorCode " + error.code);
      console.info("rpc write file descriptor fail, errorMessage" + error.message);
  }
  try {
      let containFD = sequence.containFileDescriptors();
C
crazy_hu 已提交
2785
      console.log("RpcTest: sequence after write fd containFd result is : " + containFD);
W
wanghaoxu 已提交
2786 2787 2788 2789
  } catch(error) {
      console.info("rpc contain file descriptor fail, errorCode " + error.code);
      console.info("rpc contain file descriptor fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2790 2791
  ```

W
wanghaoxu 已提交
2792
### writeFileDescriptor
Z
zengyawen 已提交
2793

W
wanghaoxu 已提交
2794
writeFileDescriptor(fd: number): void
Z
zengyawen 已提交
2795

W
wanghaoxu 已提交
2796
写入文件描述符到MessageSequence。
Z
zengyawen 已提交
2797

Y
yangguangzhao 已提交
2798
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2799

W
wanghaoxu 已提交
2800
**参数:**
W
wangqinxiao 已提交
2801

W
wanghaoxu 已提交
2802 2803 2804
  | 参数名 | 类型   | 必填 | 说明         |
  | ------ | ------ | ---- | ------------ |
  | fd     | number | 是   | 文件描述符。 |
Z
zengyawen 已提交
2805

W
wanghaoxu 已提交
2806 2807
**错误码:**

C
crazy_hu 已提交
2808
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
2809

W
wanghaoxu 已提交
2810 2811 2812
  | 错误码ID | 错误信息 |
  | -------- | ------ |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
2813

Y
yangguangzhao 已提交
2814
**示例:**
Y
yangguangzhao 已提交
2815

Z
zengyawen 已提交
2816 2817
  ```
  import fileio from '@ohos.fileio';
W
wanghaoxu 已提交
2818
  let sequence = new rpc.MessageSequence();
Z
zengyawen 已提交
2819 2820
  let filePath = "path/to/file";
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
W
wanghaoxu 已提交
2821 2822 2823 2824 2825 2826
  try {
      sequence.writeFileDescriptor(fd);
  } catch(error) {
      console.info("rpc write file descriptor fail, errorCode " + error.code);
      console.info("rpc write file descriptor fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2827 2828 2829
  ```


W
wanghaoxu 已提交
2830
### readFileDescriptor
Z
zengyawen 已提交
2831 2832 2833

readFileDescriptor(): number

W
wanghaoxu 已提交
2834
从MessageSequence中读取文件描述符。
Z
zengyawen 已提交
2835

Y
yangguangzhao 已提交
2836
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2837

Y
yangguangzhao 已提交
2838
**返回值:**
W
wangqinxiao 已提交
2839

W
wanghaoxu 已提交
2840 2841
  | 类型   | 说明             |
  | ------ | ---------------- |
Y
yangguangzhao 已提交
2842
  | number | 返回文件描述符。 |
Z
zengyawen 已提交
2843

W
wanghaoxu 已提交
2844 2845
**错误码:**

C
crazy_hu 已提交
2846
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2847

W
wanghaoxu 已提交
2848 2849 2850
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
2851

Y
yangguangzhao 已提交
2852
**示例:**
Y
yangguangzhao 已提交
2853

Z
zengyawen 已提交
2854 2855
  ```
  import fileio from '@ohos.fileio';
W
wanghaoxu 已提交
2856
  let sequence = new rpc.MessageSequence();
Z
zengyawen 已提交
2857 2858
  let filePath = "path/to/file";
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
W
wanghaoxu 已提交
2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870
  try {
      sequence.writeFileDescriptor(fd);
  } catch(error) {
      console.info("rpc write file descriptor fail, errorCode " + error.code);
      console.info("rpc write file descriptor fail, errorMessage" + error.message);
  }
  try {
      let readFD = sequence.readFileDescriptor();
  } catch(error) {
      console.info("rpc read file descriptor fail, errorCode " + error.code);
      console.info("rpc read file descriptor fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2871 2872 2873
  ```


W
wanghaoxu 已提交
2874
### writeAshmem
Z
zengyawen 已提交
2875

W
wanghaoxu 已提交
2876
writeAshmem(ashmem: Ashmem): void
Z
zengyawen 已提交
2877

W
wanghaoxu 已提交
2878
将指定的匿名共享对象写入此MessageSequence。
Z
zengyawen 已提交
2879

Y
yangguangzhao 已提交
2880
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2881

W
wanghaoxu 已提交
2882
**参数:**
W
wangqinxiao 已提交
2883

W
wanghaoxu 已提交
2884 2885 2886
  | 参数名 | 类型   | 必填 | 说明                                  |
  | ------ | ------ | ---- | ------------------------------------- |
  | ashmem | Ashmem | 是   | 要写入MessageSequence的匿名共享对象。 |
Z
zengyawen 已提交
2887

W
wanghaoxu 已提交
2888 2889
**错误码:**

C
crazy_hu 已提交
2890
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
2891

W
wanghaoxu 已提交
2892 2893 2894
  | 错误码ID | 错误信息 |
  | ------- | ------- |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
2895

Y
yangguangzhao 已提交
2896
**示例:**
Y
yangguangzhao 已提交
2897

Z
zengyawen 已提交
2898
  ```
W
wanghaoxu 已提交
2899
  let sequence = new rpc.MessageSequence();
C
crazy_hu 已提交
2900
  let ashmem;
W
wanghaoxu 已提交
2901
  try {
C
crazy_hu 已提交
2902
      ashmem = rpc.Ashmem.create("ashmem", 1024);
W
wanghaoxu 已提交
2903 2904 2905 2906 2907 2908 2909 2910 2911 2912
  } catch(error) {
      console.info("rpc create ashmem fail, errorCode " + error.code);
      console.info("rpc creat ashmem fail, errorMessage" + error.message);
  }
  try {
      sequence.writeAshmem(ashmem);
  } catch(error) {
      console.info("rpc write ashmem fail, errorCode " + error.code);
      console.info("rpc write ashmem fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2913 2914 2915
  ```


W
wanghaoxu 已提交
2916
### readAshmem
Z
zengyawen 已提交
2917 2918 2919

readAshmem(): Ashmem

W
wanghaoxu 已提交
2920
从MessageSequence读取匿名共享对象。
Z
zengyawen 已提交
2921

Y
yangguangzhao 已提交
2922
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2923

Y
yangguangzhao 已提交
2924
**返回值:**
W
wangqinxiao 已提交
2925

W
wanghaoxu 已提交
2926 2927
  | 类型   | 说明               |
  | ------ | ------------------ |
Y
yangguangzhao 已提交
2928
  | Ashmem | 返回匿名共享对象。 |
Z
zengyawen 已提交
2929

W
wanghaoxu 已提交
2930 2931
**错误码:**

C
crazy_hu 已提交
2932
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
2933

W
wanghaoxu 已提交
2934 2935 2936
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
2937

Y
yangguangzhao 已提交
2938
**示例:**
Y
yangguangzhao 已提交
2939

Z
zengyawen 已提交
2940
  ```
W
wanghaoxu 已提交
2941
  let sequence = new rpc.MessageSequence();
C
crazy_hu 已提交
2942
  let ashmem;
W
wanghaoxu 已提交
2943
  try {
C
crazy_hu 已提交
2944
      ashmem = rpc.Ashmem.create("ashmem", 1024);
W
wanghaoxu 已提交
2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955
  } catch(error) {
      console.info("rpc create ashmem fail, errorCode " + error.code);
      console.info("rpc creat ashmem fail, errorMessage" + error.message);
  }
  try {
      sequence.writeAshmem(ashmem);
  } catch(error) {
      console.info("rpc write ashmem fail, errorCode " + error.code);
      console.info("rpc write ashmem fail, errorMessage" + error.message);
  }
  try {
C
crazy_hu 已提交
2956 2957
      let readAshmem = sequence.readAshmem();
      console.log("RpcTest: read ashmem to result is : " + readAshmem);
W
wanghaoxu 已提交
2958 2959 2960 2961
  } catch(error) {
      console.info("rpc read ashmem fail, errorCode " + error.code);
      console.info("rpc read ashmem fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
2962 2963 2964
  ```


W
wanghaoxu 已提交
2965
### getRawDataCapacity
Z
zengyawen 已提交
2966 2967 2968

getRawDataCapacity(): number

W
wanghaoxu 已提交
2969
获取MessageSequence可以容纳的最大原始数据量。
Z
zengyawen 已提交
2970

Y
yangguangzhao 已提交
2971
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2972

Y
yangguangzhao 已提交
2973
**返回值:**
W
wangqinxiao 已提交
2974

W
wanghaoxu 已提交
2975 2976 2977
  | 类型   | 说明                                                         |
  | ------ | ------------------------------------------------------------ |
  | number | 返回MessageSequence可以容纳的最大原始数据量,即128&nbsp;Mb。 |
Z
zengyawen 已提交
2978

Y
yangguangzhao 已提交
2979
**示例:**
Y
yangguangzhao 已提交
2980

Z
zengyawen 已提交
2981
  ```
W
wanghaoxu 已提交
2982 2983 2984
  let sequence = new rpc.MessageSequence();
  let result = sequence.getRawDataCapacity();
  console.log("RpcTest: sequence get RawDataCapacity result is : " + result);
Z
zengyawen 已提交
2985 2986 2987
  ```


W
wanghaoxu 已提交
2988
### writeRawData
Z
zengyawen 已提交
2989

W
wanghaoxu 已提交
2990
writeRawData(rawData: number[], size: number): void
Z
zengyawen 已提交
2991

W
wanghaoxu 已提交
2992
将原始数据写入MessageSequence对象。
Z
zengyawen 已提交
2993

Y
yangguangzhao 已提交
2994
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
2995

W
wanghaoxu 已提交
2996
**参数:**
W
wangqinxiao 已提交
2997

W
wanghaoxu 已提交
2998 2999 3000 3001
  | 参数名  | 类型     | 必填 | 说明                               |
  | ------- | -------- | ---- | ---------------------------------- |
  | rawData | number[] | 是   | 要写入的原始数据。                 |
  | size    | number   | 是   | 发送的原始数据大小,以字节为单位。 |
Z
zengyawen 已提交
3002

W
wanghaoxu 已提交
3003 3004
**错误码:**

C
crazy_hu 已提交
3005
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
3006

W
wanghaoxu 已提交
3007 3008 3009
  | 错误码ID | 错误信息 |
  | ------- | ------ |
  | 1900009 | write data to message sequence failed |
Z
zengyawen 已提交
3010

Y
yangguangzhao 已提交
3011
**示例:**
Y
yangguangzhao 已提交
3012

Z
zengyawen 已提交
3013
  ```
W
wanghaoxu 已提交
3014
  let sequence = new rpc.MessageSequence();
Y
yangguangzhao 已提交
3015
  let arr = [1, 2, 3, 4, 5];
W
wanghaoxu 已提交
3016 3017 3018 3019 3020 3021
  try {
      sequence.writeRawData(arr, arr.length);
  } catch(error) {
      console.info("rpc write rawdata fail, errorCode " + error.code);
      console.info("rpc write rawdata fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
3022 3023 3024
  ```


W
wanghaoxu 已提交
3025
### readRawData
Z
zengyawen 已提交
3026 3027 3028

readRawData(size: number): number[]

W
wanghaoxu 已提交
3029
从MessageSequence读取原始数据。
Z
zengyawen 已提交
3030

Y
yangguangzhao 已提交
3031
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
3032

W
wanghaoxu 已提交
3033
**参数:**
W
wangqinxiao 已提交
3034

W
wanghaoxu 已提交
3035 3036 3037
  | 参数名 | 类型   | 必填 | 说明                     |
  | ------ | ------ | ---- | ------------------------ |
  | size   | number | 是   | 要读取的原始数据的大小。 |
Z
zengyawen 已提交
3038

Y
yangguangzhao 已提交
3039
**返回值:**
W
wangqinxiao 已提交
3040

W
wanghaoxu 已提交
3041 3042
  | 类型     | 说明                           |
  | -------- | ------------------------------ |
Y
yangguangzhao 已提交
3043
  | number[] | 返回原始数据(以字节为单位)。 |
Z
zengyawen 已提交
3044

W
wanghaoxu 已提交
3045 3046
**错误码:**

C
crazy_hu 已提交
3047
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
3048

W
wanghaoxu 已提交
3049 3050 3051
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900010 | read data from message sequence failed |
W
wanghaoxu 已提交
3052

Y
yangguangzhao 已提交
3053
**示例:**
Y
yangguangzhao 已提交
3054

Z
zengyawen 已提交
3055
  ```
W
wanghaoxu 已提交
3056
  let sequence = new rpc.MessageSequence();
Y
yangguangzhao 已提交
3057
  let arr = [1, 2, 3, 4, 5];
W
wanghaoxu 已提交
3058 3059 3060 3061 3062 3063 3064 3065
  try {
      sequence.writeRawData(arr, arr.length);
  } catch(error) {
      console.info("rpc write rawdata fail, errorCode " + error.code);
      console.info("rpc write rawdata fail, errorMessage" + error.message);
  }
  try {
      let result = sequence.readRawData(5);
C
crazy_hu 已提交
3066
      console.log("RpcTest: sequence read raw data result is : " + result);
W
wanghaoxu 已提交
3067 3068 3069 3070
  } catch(error) {
      console.info("rpc read rawdata fail, errorCode " + error.code);
      console.info("rpc read rawdata fail, errorMessage" + error.message);
  }
Z
zengyawen 已提交
3071 3072
  ```

3073
## MessageParcel<sup>(deprecated)</sup>
Z
zengyawen 已提交
3074

3075 3076 3077
>从API version 9 开始不再维护,建议使用[MessageSequence](#messagesequence9)类替代。

在RPC过程中,发送方可以使用MessageParcel提供的写方法,将待发送的数据以特定格式写入该对象。接收方可以使用MessageParcel提供的读方法从该对象中读取特定格式的数据。数据格式包括:基础类型及数组、IPC对象、接口描述符和自定义序列化对象。
Z
zengyawen 已提交
3078

W
wanghaoxu 已提交
3079
### create
Z
zengyawen 已提交
3080

W
wanghaoxu 已提交
3081
create(): MessageParcel
Z
zengyawen 已提交
3082

W
wanghaoxu 已提交
3083
静态方法,创建MessageParcel对象。
Z
zengyawen 已提交
3084

Y
yangguangzhao 已提交
3085 3086
**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
3087
**返回值:**
W
wangqinxiao 已提交
3088

W
wanghaoxu 已提交
3089 3090 3091
  | 类型          | 说明                          |
  | ------------- | ----------------------------- |
  | MessageParcel | 返回创建的MessageParcel对象。 |
Z
zengyawen 已提交
3092

Y
yangguangzhao 已提交
3093
**示例:**
Y
yangguangzhao 已提交
3094

Z
zengyawen 已提交
3095 3096
  ```
  let data = rpc.MessageParcel.create();
W
wanghaoxu 已提交
3097
  console.log("RpcClient: data is " + data);
Z
zengyawen 已提交
3098 3099
  ```

W
wanghaoxu 已提交
3100
### reclaim
Z
zengyawen 已提交
3101

W
wanghaoxu 已提交
3102
reclaim(): void
Z
zengyawen 已提交
3103

W
wanghaoxu 已提交
3104
释放不再使用的MessageParcel对象。
Z
zengyawen 已提交
3105

W
wanghaoxu 已提交
3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119
**系统能力**:SystemCapability.Communication.IPC.Core

**示例:**

  ```
  let reply = rpc.MessageParcel.create();
  reply.reclaim();
  ```

### writeRemoteObject

writeRemoteObject(object: [IRemoteObject](#iremoteobject)): boolean

序列化远程对象并将其写入MessageParcel对象。
Z
zengyawen 已提交
3120

Y
yangguangzhao 已提交
3121 3122
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3123
**参数:**
W
wangqinxiao 已提交
3124

W
wanghaoxu 已提交
3125 3126 3127
  | 参数名 | 类型                            | 必填 | 说明                                    |
  | ------ | ------------------------------- | ---- | --------------------------------------- |
  | object | [IRemoteObject](#iremoteobject) | 是   | 要序列化并写入MessageParcel的远程对象。 |
Z
zengyawen 已提交
3128

Y
yangguangzhao 已提交
3129
**返回值:**
W
wangqinxiao 已提交
3130

W
wanghaoxu 已提交
3131 3132 3133
  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
  | boolean | 如果操作成功,则返回true;否则返回false。 |
Z
zengyawen 已提交
3134

Y
yangguangzhao 已提交
3135
**示例:**
Y
yangguangzhao 已提交
3136

Z
zengyawen 已提交
3137
  ```
W
wanghaoxu 已提交
3138 3139 3140
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
Z
zengyawen 已提交
3141
      }
W
wanghaoxu 已提交
3142 3143 3144 3145 3146 3147
  }
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
Z
zengyawen 已提交
3148 3149
          return true;
      }
W
wanghaoxu 已提交
3150
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
Z
zengyawen 已提交
3151 3152
          return true;
      }
W
wanghaoxu 已提交
3153 3154 3155
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
3156 3157
  }
  let data = rpc.MessageParcel.create();
W
wanghaoxu 已提交
3158 3159
  let testRemoteObject = new TestRemoteObject("testObject");
  data.writeRemoteObject(testRemoteObject);
Z
zengyawen 已提交
3160 3161
  ```

W
wanghaoxu 已提交
3162
### readRemoteObject
Z
zengyawen 已提交
3163

W
wanghaoxu 已提交
3164
readRemoteObject(): IRemoteObject
Z
zengyawen 已提交
3165

W
wanghaoxu 已提交
3166
从MessageParcel读取远程对象。此方法用于反序列化MessageParcel对象以生成IRemoteObject。远程对象按写入MessageParcel的顺序读取。
Z
zengyawen 已提交
3167

Y
yangguangzhao 已提交
3168 3169
**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
3170
**返回值:**
W
wangqinxiao 已提交
3171

W
wanghaoxu 已提交
3172 3173 3174
  | 类型                            | 说明               |
  | ------------------------------- | ------------------ |
  | [IRemoteObject](#iremoteobject) | 读取到的远程对象。 |
Z
zengyawen 已提交
3175

Y
yangguangzhao 已提交
3176
**示例:**
Y
yangguangzhao 已提交
3177

Z
zengyawen 已提交
3178
  ```
W
wanghaoxu 已提交
3179 3180 3181
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
Z
zengyawen 已提交
3182 3183
      }
  }
W
wanghaoxu 已提交
3184 3185 3186
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
Z
zengyawen 已提交
3187
      }
W
wanghaoxu 已提交
3188 3189 3190 3191 3192 3193 3194 3195
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
Z
zengyawen 已提交
3196 3197
      }
  }
W
wanghaoxu 已提交
3198 3199 3200 3201
  let data = rpc.MessageParcel.create();
  let testRemoteObject = new TestRemoteObject("testObject");
  data.writeRemoteObject(testRemoteObject);
  let proxy = data.readRemoteObject();
Z
zengyawen 已提交
3202 3203
  ```

W
wanghaoxu 已提交
3204
### writeInterfaceToken
Z
zengyawen 已提交
3205

W
wanghaoxu 已提交
3206
writeInterfaceToken(token: string): boolean
Z
zengyawen 已提交
3207

W
wanghaoxu 已提交
3208
将接口描述符写入MessageParcel对象,远端对象可使用该信息校验本次通信。
Z
zengyawen 已提交
3209

W
wanghaoxu 已提交
3210
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
3211

W
wanghaoxu 已提交
3212
**参数:**
Z
zengyawen 已提交
3213

W
wanghaoxu 已提交
3214 3215 3216
  | 参数名 | 类型   | 必填 | 说明               |
  | ------ | ------ | ---- | ------------------ |
  | token  | string | 是   | 字符串类型描述符。 |
Z
zengyawen 已提交
3217

W
wanghaoxu 已提交
3218
**返回值:**
Z
zengyawen 已提交
3219

W
wanghaoxu 已提交
3220 3221 3222
  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
  | boolean | 如果操作成功,则返回true;否则返回false。 |
Y
yangguangzhao 已提交
3223

Y
yangguangzhao 已提交
3224
**示例:**
Y
yangguangzhao 已提交
3225

Z
zengyawen 已提交
3226
  ```
W
wanghaoxu 已提交
3227 3228 3229
  let data = rpc.MessageParcel.create();
  let result = data.writeInterfaceToken("aaa");
  console.log("RpcServer: writeInterfaceToken is " + result);
Z
zengyawen 已提交
3230 3231 3232
  ```


W
wanghaoxu 已提交
3233
### readInterfaceToken
Z
zengyawen 已提交
3234

W
wanghaoxu 已提交
3235
readInterfaceToken(): string
Y
yangguangzhao 已提交
3236

W
wanghaoxu 已提交
3237
从MessageParcel中读取接口描述符,接口描述符按写入MessageParcel的顺序读取,本地对象可使用该信息检验本次通信。
Z
zengyawen 已提交
3238

W
wanghaoxu 已提交
3239
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
3240

W
wanghaoxu 已提交
3241
**返回值:**
Z
zengyawen 已提交
3242

W
wanghaoxu 已提交
3243 3244 3245
  | 类型   | 说明                     |
  | ------ | ------------------------ |
  | string | 返回读取到的接口描述符。 |
Z
zengyawen 已提交
3246

W
wanghaoxu 已提交
3247
**示例:**
Z
zengyawen 已提交
3248

W
wanghaoxu 已提交
3249 3250
  ```
  class Stub extends rpc.RemoteObject {
3251
      onRemoteMessageRequest(code, data, reply, option) {
W
wanghaoxu 已提交
3252 3253 3254 3255 3256 3257
          let interfaceToken = data.readInterfaceToken();
          console.log("RpcServer: interfaceToken is " + interfaceToken);
          return true;
      }
  }
  ```
Z
zengyawen 已提交
3258 3259


W
wanghaoxu 已提交
3260
### getSize
Z
zengyawen 已提交
3261

W
wanghaoxu 已提交
3262
getSize(): number
Y
yangguangzhao 已提交
3263

W
wanghaoxu 已提交
3264
获取当前MessageParcel的数据大小。
W
wangqinxiao 已提交
3265

W
wanghaoxu 已提交
3266
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
3267

Y
yangguangzhao 已提交
3268
**返回值:**
W
wangqinxiao 已提交
3269

W
wanghaoxu 已提交
3270 3271 3272
  | 类型   | 说明                                          |
  | ------ | --------------------------------------------- |
  | number | 获取的MessageParcel的数据大小。以字节为单位。 |
Z
zengyawen 已提交
3273

W
wanghaoxu 已提交
3274
**示例:**
Z
zengyawen 已提交
3275

W
wanghaoxu 已提交
3276 3277 3278 3279 3280
  ```
  let data = rpc.MessageParcel.create();
  let size = data.getSize();
  console.log("RpcClient: size is " + size);
  ```
W
wangqinxiao 已提交
3281

Z
zengyawen 已提交
3282

W
wanghaoxu 已提交
3283
### getCapacity
Z
zengyawen 已提交
3284

W
wanghaoxu 已提交
3285
getCapacity(): number
Y
yangguangzhao 已提交
3286

W
wanghaoxu 已提交
3287
获取当前MessageParcel的容量。
W
wangqinxiao 已提交
3288

W
wanghaoxu 已提交
3289
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
3290

Y
yangguangzhao 已提交
3291
**返回值:**
W
wangqinxiao 已提交
3292

W
wanghaoxu 已提交
3293 3294 3295
  | 类型   | 说明                                          |
  | ------ | --------------------------------------------- |
  | number | 获取的MessageParcel的容量大小。以字节为单位。 |
Z
zengyawen 已提交
3296

W
wanghaoxu 已提交
3297
**示例:**
Z
zengyawen 已提交
3298

W
wanghaoxu 已提交
3299 3300 3301 3302 3303
  ```
  let data = rpc.MessageParcel.create();
  let result = data.getCapacity();
  console.log("RpcClient: capacity is " + result);
  ```
3304

W
wangqinxiao 已提交
3305

W
wanghaoxu 已提交
3306
### setSize
Z
zengyawen 已提交
3307

W
wanghaoxu 已提交
3308 3309 3310
setSize(size: number): boolean

设置MessageParcel实例中包含的数据大小。
Y
yangguangzhao 已提交
3311 3312 3313

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3314
**参数:**
W
wangqinxiao 已提交
3315

W
wanghaoxu 已提交
3316 3317 3318
  | 参数名 | 类型   | 必填 | 说明                                        |
  | ------ | ------ | ---- | ------------------------------------------- |
  | size   | number | 是   | MessageParcel实例的数据大小。以字节为单位。 |
3319 3320

**返回值:**
W
wangqinxiao 已提交
3321

W
wanghaoxu 已提交
3322 3323 3324
  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 设置成功返回true,否则返回false。 |
3325

W
wanghaoxu 已提交
3326
**示例:**
3327

W
wanghaoxu 已提交
3328 3329 3330 3331 3332
  ```
  let data = rpc.MessageParcel.create();
  let setSize = data.setSize(16);
  console.log("RpcClient: setSize is " + setSize);
  ```
3333 3334


W
wanghaoxu 已提交
3335
### setCapacity
W
wangqinxiao 已提交
3336

W
wanghaoxu 已提交
3337
setCapacity(size: number): boolean
Y
yangguangzhao 已提交
3338

W
wanghaoxu 已提交
3339
设置MessageParcel实例的存储容量。
W
wangqinxiao 已提交
3340

W
wanghaoxu 已提交
3341
**系统能力**:SystemCapability.Communication.IPC.Core
Y
yangguangzhao 已提交
3342

W
wanghaoxu 已提交
3343
**参数:**
Y
yangguangzhao 已提交
3344

W
wanghaoxu 已提交
3345 3346 3347
  | 参数名 | 类型   | 必填 | 说明                                        |
  | ------ | ------ | ---- | ------------------------------------------- |
  | size   | number | 是   | MessageParcel实例的存储容量。以字节为单位。 |
Z
zengyawen 已提交
3348

W
wanghaoxu 已提交
3349
**返回值:**
Z
zengyawen 已提交
3350

W
wanghaoxu 已提交
3351 3352 3353
  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 设置成功返回true,否则返回false。 |
Y
yangguangzhao 已提交
3354

W
wanghaoxu 已提交
3355
**示例:**
W
wangqinxiao 已提交
3356

W
wanghaoxu 已提交
3357 3358 3359 3360 3361
  ```
  let data = rpc.MessageParcel.create();
  let result = data.setCapacity(100);
  console.log("RpcClient: setCapacity is " + result);
  ```
Z
zengyawen 已提交
3362 3363


W
wanghaoxu 已提交
3364
### getWritableBytes
Z
zengyawen 已提交
3365

W
wanghaoxu 已提交
3366
getWritableBytes(): number
Z
zengyawen 已提交
3367

W
wanghaoxu 已提交
3368
获取MessageParcel的可写字节空间。
Z
zengyawen 已提交
3369

Y
yangguangzhao 已提交
3370 3371
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3372
**返回值:**
W
wangqinxiao 已提交
3373

W
wanghaoxu 已提交
3374 3375 3376
  | 类型   | 说明                                                |
  | ------ | --------------------------------------------------- |
  | number | 获取到的MessageParcel的可写字节空间。以字节为单位。 |
Z
zengyawen 已提交
3377

W
wanghaoxu 已提交
3378
**示例:**
W
wangqinxiao 已提交
3379

W
wanghaoxu 已提交
3380 3381
  ```
  class Stub extends rpc.RemoteObject {
3382
      onRemoteMessageRequest(code, data, reply, option) {
W
wanghaoxu 已提交
3383 3384 3385 3386 3387 3388
          let getWritableBytes = data.getWritableBytes();
          console.log("RpcServer: getWritableBytes is " + getWritableBytes);
          return true;
      }
  }
  ```
Z
zengyawen 已提交
3389 3390


W
wanghaoxu 已提交
3391
### getReadableBytes
Z
zengyawen 已提交
3392

W
wanghaoxu 已提交
3393
getReadableBytes(): number
Z
zengyawen 已提交
3394

W
wanghaoxu 已提交
3395
获取MessageParcel的可读字节空间。
Z
zengyawen 已提交
3396

Y
yangguangzhao 已提交
3397 3398
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3399
**返回值:**
W
wangqinxiao 已提交
3400

W
wanghaoxu 已提交
3401 3402 3403
  | 类型   | 说明                                                |
  | ------ | --------------------------------------------------- |
  | number | 获取到的MessageParcel的可读字节空间。以字节为单位。 |
Z
zengyawen 已提交
3404

W
wanghaoxu 已提交
3405
**示例:**
W
wangqinxiao 已提交
3406

W
wanghaoxu 已提交
3407 3408 3409 3410 3411 3412 3413 3414 3415
  ```
  class Stub extends rpc.RemoteObject {
      onRemoteRequest(code, data, reply, option) {
          let result = data.getReadableBytes();
          console.log("RpcServer: getReadableBytes is " + result);
          return true;
      }
  }
  ```
Z
zengyawen 已提交
3416 3417


W
wanghaoxu 已提交
3418
### getReadPosition
Z
zengyawen 已提交
3419

W
wanghaoxu 已提交
3420
getReadPosition(): number
Z
zengyawen 已提交
3421

W
wanghaoxu 已提交
3422
获取MessageParcel的读位置。
Z
zengyawen 已提交
3423

Y
yangguangzhao 已提交
3424 3425
**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
3426
**返回值:**
W
wangqinxiao 已提交
3427

W
wanghaoxu 已提交
3428 3429 3430
  | 类型   | 说明                                    |
  | ------ | --------------------------------------- |
  | number | 返回MessageParcel实例中的当前读取位置。 |
Z
zengyawen 已提交
3431

W
wanghaoxu 已提交
3432
**示例:**
Z
zengyawen 已提交
3433

W
wanghaoxu 已提交
3434 3435 3436 3437 3438
  ```
  let data = rpc.MessageParcel.create();
  let readPos = data.getReadPosition();
  console.log("RpcClient: readPos is " + readPos);
  ```
Z
zengyawen 已提交
3439 3440


W
wanghaoxu 已提交
3441 3442 3443 3444 3445
### getWritePosition

getWritePosition(): number

获取MessageParcel的写位置。
Z
zengyawen 已提交
3446

Y
yangguangzhao 已提交
3447 3448
**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
3449
**返回值:**
W
wangqinxiao 已提交
3450

W
wanghaoxu 已提交
3451 3452 3453
  | 类型   | 说明                                    |
  | ------ | --------------------------------------- |
  | number | 返回MessageParcel实例中的当前写入位置。 |
Z
zengyawen 已提交
3454

W
wanghaoxu 已提交
3455
**示例:**
Z
zengyawen 已提交
3456

W
wanghaoxu 已提交
3457 3458 3459 3460 3461 3462
  ```
  let data = rpc.MessageParcel.create();
  data.writeInt(10);
  let bwPos = data.getWritePosition();
  console.log("RpcClient: bwPos is " + bwPos);
  ```
Z
zengyawen 已提交
3463 3464


W
wanghaoxu 已提交
3465
### rewindRead
Y
yangguangzhao 已提交
3466

W
wanghaoxu 已提交
3467
rewindRead(pos: number): boolean
Y
yangguangzhao 已提交
3468

W
wanghaoxu 已提交
3469
重新偏移读取位置到指定的位置。
Y
yangguangzhao 已提交
3470

W
wanghaoxu 已提交
3471
**系统能力**:SystemCapability.Communication.IPC.Core
Y
yangguangzhao 已提交
3472

W
wanghaoxu 已提交
3473
**参数:**
Z
zengyawen 已提交
3474

W
wanghaoxu 已提交
3475 3476 3477
  | 参数名 | 类型   | 必填 | 说明                     |
  | ------ | ------ | ---- | ------------------------ |
  | pos    | number | 是   | 开始读取数据的目标位置。 |
Z
zengyawen 已提交
3478

W
wanghaoxu 已提交
3479
**返回值:**
W
wangqinxiao 已提交
3480

W
wanghaoxu 已提交
3481 3482 3483
  | 类型    | 说明                                              |
  | ------- | ------------------------------------------------- |
  | boolean | 如果读取位置发生更改,则返回true;否则返回false。 |
Z
zengyawen 已提交
3484

W
wanghaoxu 已提交
3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506
**示例:**

  ```
  let data = rpc.MessageParcel.create();
  data.writeInt(12);
  data.writeString("parcel");
  let number = data.readInt();
  console.log("RpcClient: number is " + number);
  data.rewindRead(0);
  let number2 = data.readInt();
  console.log("RpcClient: rewindRead is " + number2);
  ```


### rewindWrite

rewindWrite(pos: number): boolean

重新偏移写位置到指定的位置。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3507
**参数:**
W
wanghaoxu 已提交
3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538

  | 参数名 | 类型   | 必填 | 说明                     |
  | ------ | ------ | ---- | ------------------------ |
  | pos    | number | 是   | 开始写入数据的目标位置。 |

**返回值:**

  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 如果写入位置更改,则返回true;否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  data.writeInt(4);
  data.rewindWrite(0);
  data.writeInt(5);
  let number = data.readInt();
  console.log("RpcClient: rewindWrite is: " + number);
  ```


### writeByte

writeByte(val: number): boolean

将字节值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3539
**参数:**
W
wanghaoxu 已提交
3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592

  | 参数名 | 类型   | 必填 | 说明             |
  | ------ | ------ | ---- | ---------------- |
  | val    | number | 是   | 要写入的字节值。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回成功,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeByte(2);
  console.log("RpcClient: writeByte is: " + result);
  ```


### readByte

readByte(): number

从MessageParcel实例读取字节值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明         |
  | ------ | ------------ |
  | number | 返回字节值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeByte(2);
  console.log("RpcClient: writeByte is: " + result);
  let ret = data.readByte();
  console.log("RpcClient: readByte is: " + ret);
  ```


### writeShort

writeShort(val: number): boolean

将短整数值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3593
**参数:**
W
wanghaoxu 已提交
3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646

  | 参数名 | 类型   | 必填 | 说明               |
  | ------ | ------ | ---- | ------------------ |
  | val    | number | 是   | 要写入的短整数值。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeShort(8);
  console.log("RpcClient: writeShort is: " + result);
  ```


### readShort

readShort(): number

从MessageParcel实例读取短整数值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明           |
  | ------ | -------------- |
  | number | 返回短整数值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeShort(8);
  console.log("RpcClient: writeShort is: " + result);
  let ret = data.readShort();
  console.log("RpcClient: readShort is: " + ret);
  ```


### writeInt

writeInt(val: number): boolean

将整数值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3647
**参数:**
W
wanghaoxu 已提交
3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700

  | 参数名 | 类型   | 必填 | 说明             |
  | ------ | ------ | ---- | ---------------- |
  | val    | number | 是   | 要写入的整数值。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回成功,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeInt(10);
  console.log("RpcClient: writeInt is " + result);
  ```


### readInt

readInt(): number

从MessageParcel实例读取整数值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明         |
  | ------ | ------------ |
  | number | 返回整数值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeInt(10);
  console.log("RpcClient: writeInt is " + result);
  let ret = data.readInt();
  console.log("RpcClient: readInt is " + ret);
  ```


### writeLong

writeLong(val: number): boolean

将长整数值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3701
**参数:**
W
wanghaoxu 已提交
3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754

  | 参数名 | 类型   | 必填 | 说明             |
  | ------ | ------ | ---- | ---------------- |
  | val    | number | 是   | 要写入的长整数值 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeLong(10000);
  console.log("RpcClient: writeLong is " + result);
  ```


### readLong

readLong(): number

从MessageParcel实例中读取长整数值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明           |
  | ------ | -------------- |
  | number | 返回长整数值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeLong(10000);
  console.log("RpcClient: writeLong is " + result);
  let ret = data.readLong();
  console.log("RpcClient: readLong is " + ret);
  ```


### writeFloat

writeFloat(val: number): boolean

将浮点值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3755
**参数:**
W
wanghaoxu 已提交
3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808

  | 参数名 | 类型   | 必填 | 说明             |
  | ------ | ------ | ---- | ---------------- |
  | val    | number | 是   | 要写入的浮点值。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeFloat(1.2);
  console.log("RpcClient: writeFloat is " + result);
  ```


### readFloat

readFloat(): number

从MessageParcel实例中读取浮点值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明         |
  | ------ | ------------ |
  | number | 返回浮点值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeFloat(1.2);
  console.log("RpcClient: writeFloat is " + result);
  let ret = data.readFloat();
  console.log("RpcClient: readFloat is " + ret);
  ```


### writeDouble

writeDouble(val: number): boolean

将双精度浮点值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3809
**参数:**
W
wanghaoxu 已提交
3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861

  | 参数名 | 类型   | 必填 | 说明                   |
  | ------ | ------ | ---- | ---------------------- |
  | val    | number | 是   | 要写入的双精度浮点值。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeDouble(10.2);
  console.log("RpcClient: writeDouble is " + result);
  ```


### readDouble

readDouble(): number

从MessageParcel实例读取双精度浮点值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明               |
  | ------ | ------------------ |
  | number | 返回双精度浮点值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeDouble(10.2);
  console.log("RpcClient: writeDouble is " + result);
  let ret = data.readDouble();
  console.log("RpcClient: readDouble is " + ret);
  ```

### writeBoolean

writeBoolean(val: boolean): boolean

将布尔值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3862
**参数:**
W
wanghaoxu 已提交
3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915

  | 参数名 | 类型    | 必填 | 说明             |
  | ------ | ------- | ---- | ---------------- |
  | val    | boolean | 是   | 要写入的布尔值。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeBoolean(false);
  console.log("RpcClient: writeBoolean is " + result);
  ```


### readBoolean

readBoolean(): boolean

从MessageParcel实例读取布尔值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型    | 说明                 |
  | ------- | -------------------- |
  | boolean | 返回读取到的布尔值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeBoolean(false);
  console.log("RpcClient: writeBoolean is " + result);
  let ret = data.readBoolean();
  console.log("RpcClient: readBoolean is " + ret);
  ```


### writeChar

writeChar(val: number): boolean

将单个字符值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
3916
**参数:**
W
wanghaoxu 已提交
3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968

  | 参数名 | 类型   | 必填 | 说明                 |
  | ------ | ------ | ---- | -------------------- |
  | val    | number | 是   | 要写入的单个字符值。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeChar(97);
  console.log("RpcClient: writeChar is " + result);
  ```


### readChar

readChar(): number

从MessageParcel实例中读取单个字符值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明             |
  | ------ | ---------------- |
  | number | 返回单个字符值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeChar(97);
  console.log("RpcClient: writeChar is " + result);
  let ret = data.readChar();
  console.log("RpcClient: readChar is " + ret);
  ```


### writeString

writeString(val: string): boolean

将字符串值写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core
3969

W
wanghaoxu 已提交
3970
**参数:**
3971

W
wanghaoxu 已提交
3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023
  | 参数名 | 类型   | 必填 | 说明                                      |
  | ------ | ------ | ---- | ----------------------------------------- |
  | val    | string | 是   | 要写入的字符串值,其长度应小于40960字节。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeString('abc');
  console.log("RpcClient: writeString  is " + result);
  ```


### readString

readString(): string

从MessageParcel实例读取字符串值。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明           |
  | ------ | -------------- |
  | string | 返回字符串值。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeString('abc');
  console.log("RpcClient: writeString  is " + result);
  let ret = data.readString();
  console.log("RpcClient: readString is " + ret);
  ```


### writeSequenceable

writeSequenceable(val: Sequenceable): boolean

将自定义序列化对象写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4024
**参数:**
W
wanghaoxu 已提交
4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071

  | 参数名 | 类型                          | 必填 | 说明                 |
  | ------ | ----------------------------- | ---- | -------------------- |
  | val    | [Sequenceable](#sequenceable) | 是   | 要写入的可序列对象。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  class MySequenceable {
      num: number;
      str: string;
      constructor(num, str) {
          this.num = num;
          this.str = str;
      }
      marshalling(messageParcel) {
          messageParcel.writeInt(this.num);
          messageParcel.writeString(this.str);
          return true;
      }
      unmarshalling(messageParcel) {
          this.num = messageParcel.readInt();
          this.str = messageParcel.readString();
          return true;
      }
  }
  let sequenceable = new MySequenceable(1, "aaa");
  let data = rpc.MessageParcel.create();
  let result = data.writeSequenceable(sequenceable);
  console.log("RpcClient: writeSequenceable is " + result);
  ```


### readSequenceable

readSequenceable(dataIn: Sequenceable) : boolean

从MessageParcel实例中读取成员变量到指定的对象(dataIn)。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4072
**参数:**
W
wanghaoxu 已提交
4073 4074 4075

  | 参数名 | 类型                          | 必填 | 说明                                    |
  | ------ | ----------------------------- | ---- | --------------------------------------- |
4076
  | dataIn | [Sequenceable](#sequenceabledeprecated) | 是   | 需要从MessageParcel读取成员变量的对象。 |
W
wanghaoxu 已提交
4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122

**返回值:**

  | 类型    | 说明                                        |
  | ------- | ------------------------------------------- |
  | boolean | 如果反序列成功,则返回true;否则返回false。 |

**示例:**

  ```
  class MySequenceable {
      num: number;
      str: string;
      constructor(num, str) {
          this.num = num;
          this.str = str;
      }
      marshalling(messageParcel) {
          messageParcel.writeInt(this.num);
          messageParcel.writeString(this.str);
          return true;
      }
      unmarshalling(messageParcel) {
          this.num = messageParcel.readInt();
          this.str = messageParcel.readString();
          return true;
      }
  }
  let sequenceable = new MySequenceable(1, "aaa");
  let data = rpc.MessageParcel.create();
  let result = data.writeSequenceable(sequenceable);
  console.log("RpcClient: writeSequenceable is " + result);
  let ret = new MySequenceable(0, "");
  let result2 = data.readSequenceable(ret);
  console.log("RpcClient: writeSequenceable is " + result2);
  ```


### writeByteArray

writeByteArray(byteArray: number[]): boolean

将字节数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4123
**参数:**
W
wanghaoxu 已提交
4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152

  | 参数名    | 类型     | 必填 | 说明               |
  | --------- | -------- | ---- | ------------------ |
  | byteArray | number[] | 是   | 要写入的字节数组。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let ByteArrayVar = [1, 2, 3, 4, 5];
  let result = data.writeByteArray(ByteArrayVar);
  console.log("RpcClient: writeByteArray is " + result);
  ```


### readByteArray

readByteArray(dataIn: number[]) : void

从MessageParcel实例读取字节数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4153
**参数:**
W
wanghaoxu 已提交
4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204

  | 参数名 | 类型     | 必填 | 说明               |
  | ------ | -------- | ---- | ------------------ |
  | dataIn | number[] | 是   | 要读取的字节数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let ByteArrayVar = [1, 2, 3, 4, 5];
  let result = data.writeByteArray(ByteArrayVar);
  console.log("RpcClient: writeByteArray is " + result);
  let array = new Array(5);
  data.readByteArray(array);
  ```


### readByteArray

readByteArray(): number[]

从MessageParcel实例中读取字节数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型     | 说明           |
  | -------- | -------------- |
  | number[] | 返回字节数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let ByteArrayVar = [1, 2, 3, 4, 5];
  let result = data.writeByteArray(ByteArrayVar);
  console.log("RpcClient: writeByteArray is " + result);
  let array = data.readByteArray();
  console.log("RpcClient: readByteArray is " + array);
  ```


### writeShortArray

writeShortArray(shortArray: number[]): boolean

将短整数数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4205
**参数:**
W
wanghaoxu 已提交
4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233

  | 参数名     | 类型     | 必填 | 说明                 |
  | ---------- | -------- | ---- | -------------------- |
  | shortArray | number[] | 是   | 要写入的短整数数组。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeShortArray([11, 12, 13]);
  console.log("RpcClient: writeShortArray is " + result);
  ```


### readShortArray

readShortArray(dataIn: number[]) : void

从MessageParcel实例中读取短整数数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4234
**参数:**
W
wanghaoxu 已提交
4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283

  | 参数名 | 类型     | 必填 | 说明                 |
  | ------ | -------- | ---- | -------------------- |
  | dataIn | number[] | 是   | 要读取的短整数数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeShortArray([11, 12, 13]);
  console.log("RpcClient: writeShortArray is " + result);
  let array = new Array(3);
  data.readShortArray(array);
  ```


### readShortArray

readShortArray(): number[]

从MessageParcel实例中读取短整数数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型     | 说明             |
  | -------- | ---------------- |
  | number[] | 返回短整数数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeShortArray([11, 12, 13]);
  console.log("RpcClient: writeShortArray is " + result);
  let array = data.readShortArray();
 console.log("RpcClient: readShortArray is " + array);
  ```


### writeIntArray

writeIntArray(intArray: number[]): boolean

将整数数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4284
**参数:**
W
wanghaoxu 已提交
4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312

  | 参数名   | 类型     | 必填 | 说明               |
  | -------- | -------- | ---- | ------------------ |
  | intArray | number[] | 是   | 要写入的整数数组。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeIntArray([100, 111, 112]);
  console.log("RpcClient: writeIntArray is " + result);
  ```


### readIntArray

readIntArray(dataIn: number[]) : void

从MessageParcel实例中读取整数数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4313
**参数:**
W
wanghaoxu 已提交
4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362

  | 参数名 | 类型     | 必填 | 说明               |
  | ------ | -------- | ---- | ------------------ |
  | dataIn | number[] | 是   | 要读取的整数数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeIntArray([100, 111, 112]);
  console.log("RpcClient: writeIntArray is " + result);
  let array = new Array(3);
  data.readIntArray(array);
  ```


### readIntArray

readIntArray(): number[]

从MessageParcel实例中读取整数数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型     | 说明           |
  | -------- | -------------- |
  | number[] | 返回整数数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeIntArray([100, 111, 112]);
  console.log("RpcClient: writeIntArray is " + result);
  let array = data.readIntArray();
  console.log("RpcClient: readIntArray is " + array);
  ```


### writeLongArray

writeLongArray(longArray: number[]): boolean

将长整数数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4363
**参数:**
W
wanghaoxu 已提交
4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391

  | 参数名    | 类型     | 必填 | 说明                 |
  | --------- | -------- | ---- | -------------------- |
  | longArray | number[] | 是   | 要写入的长整数数组。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeLongArray([1111, 1112, 1113]);
  console.log("RpcClient: writeLongArray is " + result);
  ```


### readLongArray

readLongArray(dataIn: number[]) : void

从MessageParcel实例读取长整数数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4392
**参数:**
W
wanghaoxu 已提交
4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441

  | 参数名 | 类型     | 必填 | 说明                 |
  | ------ | -------- | ---- | -------------------- |
  | dataIn | number[] | 是   | 要读取的长整数数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeLongArray([1111, 1112, 1113]);
  console.log("RpcClient: writeLongArray is " + result);
  let array = new Array(3);
  data.readLongArray(array);
  ```


### readLongArray

readLongArray(): number[]

从MessageParcel实例中读取长整数数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

 | 类型     | 说明             |
 | -------- | ---------------- |
 | number[] | 返回长整数数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeLongArray([1111, 1112, 1113]);
  console.log("RpcClient: writeLongArray is " + result);
  let array = data.readLongArray();
  console.log("RpcClient: readLongArray is " + array);
  ```


### writeFloatArray

writeFloatArray(floatArray: number[]): boolean

将浮点数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4442
**参数:**
W
wanghaoxu 已提交
4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470

  | 参数名 | 类型 | 必填 | 说明 |
  | ---------- | -------- | ---- | --- |
  | floatArray | number[] | 是   | 要写入的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
  console.log("RpcClient: writeFloatArray is " + result);
  ```


### readFloatArray

readFloatArray(dataIn: number[]) : void

从MessageParcel实例中读取浮点数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4471
**参数:**
W
wanghaoxu 已提交
4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520

  | 参数名 | 类型 | 必填 | 说明 |
  | ------ | -------- | ---- | ------ |
  | dataIn | number[] | 是   | 要读取的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
  console.log("RpcClient: writeFloatArray is " + result);
  let array = new Array(3);
  data.readFloatArray(array);
  ```


### readFloatArray

readFloatArray(): number[]

从MessageParcel实例中读取浮点数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型     | 说明           |
  | -------- | -------------- |
  | number[] | 返回浮点数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeFloatArray([1.2, 1.3, 1.4]);
  console.log("RpcClient: writeFloatArray is " + result);
  let array = data.readFloatArray();
  console.log("RpcClient: readFloatArray is " + array);
  ```


### writeDoubleArray

writeDoubleArray(doubleArray: number[]): boolean

将双精度浮点数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4521
**参数:**
W
wanghaoxu 已提交
4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549

  | 参数名      | 类型     | 必填 | 说明                     |
  | ----------- | -------- | ---- | ------------------------ |
  | doubleArray | number[] | 是   | 要写入的双精度浮点数组。 |

**返回值:**

  | 类型    | 说明                          |
  | ------- | ----------------------------- |
  | boolean | 写入返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
  console.log("RpcClient: writeDoubleArray is " + result);
  ```


### readDoubleArray

readDoubleArray(dataIn: number[]) : void

从MessageParcel实例中读取双精度浮点数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4550
**参数:**
W
wanghaoxu 已提交
4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599

  | 参数名 | 类型     | 必填 | 说明                     |
  | ------ | -------- | ---- | ------------------------ |
  | dataIn | number[] | 是   | 要读取的双精度浮点数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
  console.log("RpcClient: writeDoubleArray is " + result);
  let array = new Array(3);
  data.readDoubleArray(array);
  ```


### readDoubleArray

readDoubleArray(): number[]

从MessageParcel实例读取双精度浮点数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型     | 说明                 |
  | -------- | -------------------- |
  | number[] | 返回双精度浮点数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
  console.log("RpcClient: writeDoubleArray is " + result);
  let array = data.readDoubleArray();
  console.log("RpcClient: readDoubleArray is " + array);
  ```


### writeBooleanArray

writeBooleanArray(booleanArray: boolean[]): boolean

将布尔数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4600
**参数:**
W
wanghaoxu 已提交
4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628

  | 参数名       | 类型      | 必填 | 说明               |
  | ------------ | --------- | ---- | ------------------ |
  | booleanArray | boolean[] | 是   | 要写入的布尔数组。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeBooleanArray([false, true, false]);
  console.log("RpcClient: writeBooleanArray is " + result);
  ```


### readBooleanArray

readBooleanArray(dataIn: boolean[]) : void

从MessageParcel实例中读取布尔数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4629
**参数:**
W
wanghaoxu 已提交
4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678

  | 参数名 | 类型      | 必填 | 说明               |
  | ------ | --------- | ---- | ------------------ |
  | dataIn | boolean[] | 是   | 要读取的布尔数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeBooleanArray([false, true, false]);
  console.log("RpcClient: writeBooleanArray is " + result);
  let array = new Array(3);
  data.readBooleanArray(array);
  ```


### readBooleanArray

readBooleanArray(): boolean[]

从MessageParcel实例中读取布尔数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型      | 说明           |
  | --------- | -------------- |
  | boolean[] | 返回布尔数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeBooleanArray([false, true, false]);
  console.log("RpcClient: writeBooleanArray is " + result);
  let array = data.readBooleanArray();
  console.log("RpcClient: readBooleanArray is " + array);
  ```


### writeCharArray

writeCharArray(charArray: number[]): boolean

将单个字符数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4679
**参数:**
W
wanghaoxu 已提交
4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707

  | 参数名    | 类型     | 必填 | 说明                   |
  | --------- | -------- | ---- | ---------------------- |
  | charArray | number[] | 是   | 要写入的单个字符数组。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeCharArray([97, 98, 88]);
  console.log("RpcClient: writeCharArray is " + result);
  ```


### readCharArray

readCharArray(dataIn: number[]) : void

从MessageParcel实例中读取单个字符数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4708
**参数:**
W
wanghaoxu 已提交
4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757

  | 参数名 | 类型     | 必填 | 说明                   |
  | ------ | -------- | ---- | ---------------------- |
  | dataIn | number[] | 是   | 要读取的单个字符数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeCharArray([97, 98, 99]);
  console.log("RpcClient: writeCharArray is " + result);
  let array = new Array(3);
  data.readCharArray(array);
  ```


### readCharArray

readCharArray(): number[]

从MessageParcel实例读取单个字符数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型     | 说明               |
  | -------- | ------------------ |
  | number[] | 返回单个字符数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeCharArray([97, 98, 99]);
  console.log("RpcClient: writeCharArray is " + result);
  let array = data.readCharArray();
  console.log("RpcClient: readCharArray is " + array);
  ```


### writeStringArray

writeStringArray(stringArray: string[]): boolean

将字符串数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4758
**参数:**
W
wanghaoxu 已提交
4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786

  | 参数名      | 类型     | 必填 | 说明 |
  | ----------- | -------- | ---- | ---------------- |
  | stringArray | string[] | 是   | 要写入的字符串数组,数组单个元素的长度应小于40960字节。 |

**返回值:**

  | 类型    | 说明 |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeStringArray(["abc", "def"]);
  console.log("RpcClient: writeStringArray is " + result);
  ```


### readStringArray

readStringArray(dataIn: string[]) : void

从MessageParcel实例读取字符串数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4787
**参数:**
W
wanghaoxu 已提交
4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905

  | 参数名 | 类型     | 必填 | 说明                 |
  | ------ | -------- | ---- | -------------------- |
  | dataIn | string[] | 是   | 要读取的字符串数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeStringArray(["abc", "def"]);
  console.log("RpcClient: writeStringArray is " + result);
  let array = new Array(2);
  data.readStringArray(array);
  ```


### readStringArray

readStringArray(): string[]

从MessageParcel实例读取字符串数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型     | 说明             |
  | -------- | ---------------- |
  | string[] | 返回字符串数组。 |

**示例:**

  ```
  let data = rpc.MessageParcel.create();
  let result = data.writeStringArray(["abc", "def"]);
  console.log("RpcClient: writeStringArray is " + result);
  let array = data.readStringArray();
  console.log("RpcClient: readStringArray is " + array);
  ```


### writeNoException<sup>8+</sup>

writeNoException(): void

向MessageParcel写入“指示未发生异常”的信息。

**系统能力**:SystemCapability.Communication.IPC.Core

**示例:**

  ```
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
      }
  }
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
      onRemoteRequest(code, data, reply, option) {
          if (code === 1) {
              console.log("RpcServer: onRemoteRequest called");
              reply.writeNoException();
              return true;
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
      }
  }
  ```

### readException<sup>8+</sup>

readException(): void

从MessageParcel中读取异常。

**系统能力**:SystemCapability.Communication.IPC.Core

**示例:**

  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
  };
  FA.connectAbility(want, connect);
  let option = new rpc.MessageOption();
  let data = rpc.MessageParcel.create();
  let reply = rpc.MessageParcel.create();
  data.writeInt(1);
  data.writeString("hello");
W
wanghaoxu 已提交
4906
  proxy.sendMessageRequest(1, data, reply, option)
W
wanghaoxu 已提交
4907 4908
      .then(function(errCode) {
          if (errCode === 0) {
W
wanghaoxu 已提交
4909
              console.log("sendMessageRequest got result");
W
wanghaoxu 已提交
4910 4911 4912 4913
              reply.readException();
              let msg = reply.readString();
              console.log("RPCTest: reply msg: " + msg);
          } else {
W
wanghaoxu 已提交
4914
              console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode);
W
wanghaoxu 已提交
4915 4916
          }
      }).catch(function(e) {
W
wanghaoxu 已提交
4917
          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
W
wanghaoxu 已提交
4918
      }).finally (() => {
W
wanghaoxu 已提交
4919
          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
W
wanghaoxu 已提交
4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932
          data.reclaim();
          reply.reclaim();
      });
  ```

### writeSequenceableArray

writeSequenceableArray(sequenceableArray: Sequenceable[]): boolean

将可序列化对象数组写入MessageParcel实例。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4933
**参数:**
W
wanghaoxu 已提交
4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983

  | 参数名            | 类型           | 必填 | 说明                       |
  | ----------------- | -------------- | ---- | -------------------------- |
  | sequenceableArray | Sequenceable[] | 是   | 要写入的可序列化对象数组。 |

**返回值:**

  | 类型    | 说明                              |
  | ------- | --------------------------------- |
  | boolean | 写入成功返回true,否则返回false。 |

**示例:**

  ```
  class MySequenceable {
      num: number;
      str: string;
      constructor(num, str) {
          this.num = num;
          this.str = str;
      }
      marshalling(messageParcel) {
          messageParcel.writeInt(this.num);
          messageParcel.writeString(this.str);
          return true;
      }
      unmarshalling(messageParcel) {
          this.num = messageParcel.readInt();
          this.str = messageParcel.readString();
          return true;
      }
  }
  let sequenceable = new MySequenceable(1, "aaa");
  let sequenceable2 = new MySequenceable(2, "bbb");
  let sequenceable3 = new MySequenceable(3, "ccc");
  let a = [sequenceable, sequenceable2, sequenceable3];
  let data = rpc.MessageParcel.create();
  let result = data.writeSequenceableArray(a);
  console.log("RpcClient: writeSequenceableArray is " + result);
  ```


### readSequenceableArray<sup>8+</sup>

readSequenceableArray(sequenceableArray: Sequenceable[]): void

从MessageParcel实例读取可序列化对象数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
4984
**参数:**
W
wanghaoxu 已提交
4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030

  | 参数名            | 类型           | 必填 | 说明                       |
  | ----------------- | -------------- | ---- | -------------------------- |
  | sequenceableArray | Sequenceable[] | 是   | 要读取的可序列化对象数组。 |

**示例:**

  ```
  class MySequenceable {
      num: number;
      str: string;
      constructor(num, str) {
          this.num = num;
          this.str = str;
      }
      marshalling(messageParcel) {
          messageParcel.writeInt(this.num);
          messageParcel.writeString(this.str);
          return true;
      }
      unmarshalling(messageParcel) {
          this.num = messageParcel.readInt();
          this.str = messageParcel.readString();
          return true;
      }
  }
  let sequenceable = new MySequenceable(1, "aaa");
  let sequenceable2 = new MySequenceable(2, "bbb");
  let sequenceable3 = new MySequenceable(3, "ccc");
  let a = [sequenceable, sequenceable2, sequenceable3];
  let data = rpc.MessageParcel.create();
  let result = data.writeSequenceableArray(a);
  console.log("RpcClient: writeSequenceableArray is " + result);
  let b = [new MySequenceable(0, ""), new MySequenceable(0, ""), new MySequenceable(0, "")];
  data.readSequenceableArray(b);
  ```


### writeRemoteObjectArray<sup>8+</sup>

writeRemoteObjectArray(objectArray: IRemoteObject[]): boolean

将IRemoteObject对象数组写入MessageParcel。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5031
**参数:**
W
wanghaoxu 已提交
5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083

  | 参数名      | 类型            | 必填 | 说明 |
  | ----------- | --------------- | ---- | ----- |
  | objectArray | IRemoteObject[] | 是   | 要写入MessageParcel的IRemoteObject对象数组。 |

**返回值:**

  | 类型    | 说明                                                                                                                 |
  | ------- | -------------------------------------------------------------------------------------------------------------------- |
  | boolean | 如果IRemoteObject对象数组成功写入MessageParcel,则返回true;如果对象为null或数组写入MessageParcel失败,则返回false。 |

**示例:**

  ```
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
      }
  }
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
          this.attachLocalInterface(this, descriptor);
      }
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
      asObject(): rpc.IRemoteObject {
          return this;
      }
  }
  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  let data = rpc.MessageParcel.create();
  let result = data.writeRemoteObjectArray(a);
  console.log("RpcClient: writeRemoteObjectArray is " + result);
  ```


### readRemoteObjectArray<sup>8+</sup>

readRemoteObjectArray(objects: IRemoteObject[]): void

从MessageParcel读取IRemoteObject对象数组。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5084
**参数:**
5085

W
wanghaoxu 已提交
5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180
  | 参数名  | 类型            | 必填 | 说明 |
  | ------- | --------------- | ---- | --------- |
  | objects | IRemoteObject[] | 是   | 从MessageParcel读取的IRemoteObject对象数组。 |

**示例:**

  ```
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
      }
  }
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
          this.attachLocalInterface(this, descriptor);
      }
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
         return false;
      }
      asObject(): rpc.IRemoteObject {
          return this;
      }
  }
  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  let data = rpc.MessageParcel.create();
  let result = data.writeRemoteObjectArray(a);
  let b = new Array(3);
  data.readRemoteObjectArray(b);
  ```


### readRemoteObjectArray<sup>8+</sup>

readRemoteObjectArray(): IRemoteObject[]

从MessageParcel读取IRemoteObject对象数组。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型 | 说明 |
  | --------------- | -------- |
  | IRemoteObject[] | 返回IRemoteObject对象数组。 |

**示例:**

  ```
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
      }
  }
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
          this.attachLocalInterface(this, descriptor);
      }
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
      asObject(): rpc.IRemoteObject {
          return this;
      }
  }
  let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  let data = rpc.MessageParcel.create();
  let result = data.writeRemoteObjectArray(a);
  console.log("RpcClient: readRemoteObjectArray is " + result);
  let b = data.readRemoteObjectArray();
  console.log("RpcClient: readRemoteObjectArray is " + b);
  ```


### closeFileDescriptor<sup>8+</sup>

static closeFileDescriptor(fd: number): void

关闭给定的文件描述符。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5181
**参数:**
W
wanghaoxu 已提交
5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204

  | 参数名 | 类型   | 必填 | 说明                 |
  | ------ | ------ | ---- | -------------------- |
  | fd     | number | 是   | 要关闭的文件描述符。 |

**示例:**

  ```
  import fileio from '@ohos.fileio';
  let filePath = "path/to/file";
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  rpc.MessageParcel.closeFileDescriptor(fd);
  ```


### dupFileDescriptor<sup>8+</sup>

static dupFileDescriptor(fd: number) :number

复制给定的文件描述符。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5205
**参数:**
W
wanghaoxu 已提交
5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263

  | 参数名 | 类型   | 必填 | 说明                     |
  | ------ | ------ | ---- | ------------------------ |
  | fd     | number | 是   | 表示已存在的文件描述符。 |

**返回值:**

  | 类型   | 说明                 |
  | ------ | -------------------- |
  | number | 返回新的文件描述符。 |

**示例:**

  ```
  import fileio from '@ohos.fileio';
  let filePath = "path/to/file";
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  let newFd = rpc.MessageParcel.dupFileDescriptor(fd);
  ```


### containFileDescriptors<sup>8+</sup>

containFileDescriptors(): boolean

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

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型    | 说明                                                               |
  | ------- | ------------------------------------------------------------------ |
  | boolean | 如果此MessageParcel对象包含文件描述符,则返回true;否则返回false。 |

**示例:**

  ```
  import fileio from '@ohos.fileio';
  let parcel = new rpc.MessageParcel();
  let filePath = "path/to/file";
  let r1 = parcel.containFileDescriptors();
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  let writeResult = parcel.writeFileDescriptor(fd);
  console.log("RpcTest: parcel writeFd result is : " + writeResult);
  let containFD = parcel.containFileDescriptors();
  console.log("RpcTest: parcel after write fd containFd result is : " + containFD);
  ```


### writeFileDescriptor<sup>8+</sup>

writeFileDescriptor(fd: number): boolean

写入文件描述符到MessageParcel。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5264
**参数:**
W
wanghaoxu 已提交
5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322

  | 参数名 | 类型   | 必填 | 说明         |
  | ------ | ------ | ---- | ------------ |
  | fd     | number | 是   | 文件描述符。 |

**返回值:**

  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
  | boolean | 如果操作成功,则返回true;否则返回false。 |

**示例:**

  ```
  import fileio from '@ohos.fileio';
  let parcel = new rpc.MessageParcel();
  let filePath = "path/to/file";
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  let writeResult = parcel.writeFileDescriptor(fd);
  console.log("RpcTest: parcel writeFd result is : " + writeResult);
  ```


### readFileDescriptor<sup>8+</sup>

readFileDescriptor(): number

从MessageParcel中读取文件描述符。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明             |
  | ------ | ---------------- |
  | number | 返回文件描述符。 |

**示例:**

  ```
  import fileio from '@ohos.fileio';
  let parcel = new rpc.MessageParcel();
  let filePath = "path/to/file";
  let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  let writeResult = parcel.writeFileDescriptor(fd);
  let readFD = parcel.readFileDescriptor();
  console.log("RpcTest: parcel read fd is : " + readFD);
  ```


### writeAshmem<sup>8+</sup>

writeAshmem(ashmem: Ashmem): boolean

将指定的匿名共享对象写入此MessageParcel。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5323
**参数:**
W
wanghaoxu 已提交
5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401

  | 参数名 | 类型   | 必填 | 说明                                |
  | ------ | ------ | ---- | ----------------------------------- |
  | ashmem | Ashmem | 是   | 要写入MessageParcel的匿名共享对象。 |

**返回值:**

  | 类型    | 说明                                                                 |
  | ------- | -------------------------------------------------------------------- |
  | boolean | 如果匿名共享对象成功写入此MessageParcel,则返回true;否则返回false。 |

**示例:**

  ```
  let parcel = new rpc.MessageParcel();
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
  let isWriteSuccess = parcel.writeAshmem(ashmem);
  console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
  ```


### readAshmem<sup>8+</sup>

readAshmem(): Ashmem

从MessageParcel读取匿名共享对象。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明               |
  | ------ | ------------------ |
  | Ashmem | 返回匿名共享对象。 |

**示例:**

  ```
  let parcel = new rpc.MessageParcel();
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
  let isWriteSuccess = parcel.writeAshmem(ashmem);
  console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
  let readAshmem = parcel.readAshmem();
  console.log("RpcTest: read ashmem to result is : " + readAshmem);
  ```


### getRawDataCapacity<sup>8+</sup>

getRawDataCapacity(): number

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

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明                                                       |
  | ------ | ---------------------------------------------------------- |
  | number | 返回MessageParcel可以容纳的最大原始数据量,即128&nbsp;Mb。 |

**示例:**

  ```
  let parcel = new rpc.MessageParcel();
  let result = parcel.getRawDataCapacity();
  console.log("RpcTest: parcel get RawDataCapacity result is : " + result);
  ```


### writeRawData<sup>8+</sup>

writeRawData(rawData: number[], size: number): boolean

将原始数据写入MessageParcel对象。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5402
**参数:**
W
wanghaoxu 已提交
5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432

  | 参数名  | 类型     | 必填 | 说明                               |
  | ------- | -------- | ---- | ---------------------------------- |
  | rawData | number[] | 是   | 要写入的原始数据。                 |
  | size    | number   | 是   | 发送的原始数据大小,以字节为单位。 |

**返回值:**

  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
  | boolean | 如果操作成功,则返回true;否则返回false。 |

**示例:**

  ```
  let parcel = new rpc.MessageParcel();
  let arr = [1, 2, 3, 4, 5];
  let isWriteSuccess = parcel.writeRawData(arr, arr.length);
  console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
  ```


### readRawData<sup>8+</sup>

readRawData(size: number): number[]

从MessageParcel读取原始数据。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5433
**参数:**
W
wanghaoxu 已提交
5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468

  | 参数名 | 类型   | 必填 | 说明                     |
  | ------ | ------ | ---- | ------------------------ |
  | size   | number | 是   | 要读取的原始数据的大小。 |

**返回值:**

  | 类型     | 说明                           |
  | -------- | ------------------------------ |
  | number[] | 返回原始数据(以字节为单位)。 |

**示例:**

  ```
  let parcel = new rpc.MessageParcel();
  let arr = [1, 2, 3, 4, 5];
  let isWriteSuccess = parcel.writeRawData(arr, arr.length);
  console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
  let result = parcel.readRawData(5);
  console.log("RpcTest: parcel read raw data result is : " + result);
  ```


## Parcelable<sup>9+</sup>

在进程间通信(IPC)期间,将类的对象写入MessageSequence并从MessageSequence中恢复它们。

### marshalling

marshalling(dataOut: MessageSequence): boolean

将此可序列对象封送到MessageSequence中。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5469
**参数:**
W
wanghaoxu 已提交
5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519

  | 参数名  | 类型            | 必填 | 说明                                        |
  | ------- | --------------- | ---- | ------------------------------------------- |
  | dataOut | MessageSequence | 是   | 可序列对象将被封送到的MessageSequence对象。 |

**返回值:**

  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
  | boolean | 如果封送成功,则返回true;否则返回false。 |

**示例:**

  ```
  class MyParcelable {
      num: number;
      str: string;
      constructor(num, str) {
          this.num = num;
          this.str = str;
      }
      marshalling(messageSequence) {
          messageSequence.writeInt(this.num);
          messageSequence.writeString(this.str);
          return true;
      }
      unmarshalling(messageSequence) {
          this.num = messageSequence.readInt();
          this.str = messageSequence.readString();
          return true;
      }
  }
  let parcelable = new MyParcelable(1, "aaa");
  let data = rpc.MessageSequence.create();
  let result = data.writeParcelable(parcelable);
  console.log("RpcClient: writeParcelable is " + result);
  let ret = new MyParcelable(0, "");
  let result2 = data.readParcelable(ret);
  console.log("RpcClient: readParcelable is " + result2);
  ```


### unmarshalling

unmarshalling(dataIn: MessageSequence) : boolean

从MessageSequence中解封此可序列对象。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5520
**参数:**
W
wanghaoxu 已提交
5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562

  | 参数名 | 类型            | 必填 | 说明                                            |
  | ------ | --------------- | ---- | ----------------------------------------------- |
  | dataIn | MessageSequence | 是   | 已将可序列对象封送到其中的MessageSequence对象。 |

**返回值:**

  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 如果可序列化成功,则返回true;否则返回false。 |

**示例:**

  ```
  class MyParcelable {
      num: number;
      str: string;
      constructor(num, str) {
          this.num = num;
          this.str = str;
      }
      marshalling(messageSequence) {
          messageSequence.writeInt(this.num);
          messageSequence.writeString(this.str);
          return true;
      }
      unmarshalling(messageSequence) {
          this.num = messageSequence.readInt();
          this.str = messageSequence.readString();
          return true;
      }
  }
  let parcelable = new MyParcelable(1, "aaa");
  let data = rpc.MessageSequence.create();
  let result = data.writeParcelable(parcelable);
  console.log("RpcClient: writeParcelable is " + result);
  let ret = new MyParcelable(0, "");
  let result2 = data.readParcelable(ret);
  console.log("RpcClient: readParcelable is " + result2);
  ```


5563
## Sequenceable<sup>(deprecated)</sup>
W
wanghaoxu 已提交
5564

5565 5566 5567
>从API version 9 开始不再维护,建议使用[Parcelable](#parcelable9)类替代。

在进程间通信(IPC)期间,将类的对象写入MessageParcel并从MessageParcel中恢复它们。
W
wanghaoxu 已提交
5568 5569 5570 5571 5572 5573 5574 5575 5576

### marshalling

marshalling(dataOut: MessageParcel): boolean

将此可序列对象封送到MessageParcel中。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5577
**参数:**
W
wanghaoxu 已提交
5578 5579 5580

  | 参数名  | 类型                            | 必填 | 说明                                      |
  | ------- | ------------------------------- | ---- | ----------------------------------------- |
5581
  | dataOut | [MessageParcel](#messageparceldeprecated) | 是   | 可序列对象将被封送到的MessageParcel对象。 |
W
wanghaoxu 已提交
5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627

**返回值:**

  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
  | boolean | 如果封送成功,则返回true;否则返回false。 |

**示例:**

  ```
  class MySequenceable {
      num: number;
      str: string;
      constructor(num, str) {
          this.num = num;
          this.str = str;
      }
      marshalling(messageParcel) {
          messageParcel.writeInt(this.num);
          messageParcel.writeString(this.str);
          return true;
      }
      unmarshalling(messageParcel) {
          this.num = messageParcel.readInt();
          this.str = messageParcel.readString();
          return true;
      }
  }
  let sequenceable = new MySequenceable(1, "aaa");
  let data = rpc.MessageParcel.create();
  let result = data.writeSequenceable(sequenceable);
  console.log("RpcClient: writeSequenceable is " + result);
  let ret = new MySequenceable(0, "");
  let result2 = data.readSequenceable(ret);
  console.log("RpcClient: readSequenceable is " + result2);
  ```


### unmarshalling

unmarshalling(dataIn: MessageParcel) : boolean

从MessageParcel中解封此可序列对象。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5628
**参数:**
W
wanghaoxu 已提交
5629 5630 5631

  | 参数名 | 类型                            | 必填 | 说明                                          |
  | ------ | ------------------------------- | ---- | --------------------------------------------- |
5632
  | dataIn | [MessageParcel](#messageparceldeprecated) | 是   | 已将可序列对象封送到其中的MessageParcel对象。 |
W
wanghaoxu 已提交
5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740

**返回值:**

  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 如果可序列化成功,则返回true;否则返回false。 |

**示例:**

  ```
  class MySequenceable {
      num: number;
      str: string;
      constructor(num, str) {
          this.num = num;
          this.str = str;
      }
      marshalling(messageParcel) {
          messageParcel.writeInt(this.num);
          messageParcel.writeString(this.str);
          return true;
      }
      unmarshalling(messageParcel) {
          this.num = messageParcel.readInt();
          this.str = messageParcel.readString();
          return true;
      }
  }
  let sequenceable = new MySequenceable(1, "aaa");
  let data = rpc.MessageParcel.create();
  let result = data.writeSequenceable(sequenceable);
  console.log("RpcClient: writeSequenceable is " + result);
  let ret = new MySequenceable(0, "");
  let result2 = data.readSequenceable(ret);
  console.log("RpcClient: readSequenceable is " + result2);
  ```


## IRemoteBroker

远端对象的代理持有者。用于获取代理对象。

### asObject

asObject(): IRemoteObject

需派生类实现,获取代理或远端对象。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型  | 说明 |
  | ---- | ----- |
  | [IRemoteObject](#iremoteobject) | 如果调用者是RemoteObject对象,则直接返回本身;如果调用者是[RemoteProxy](#remoteproxy)对象,则返回它的持有者[IRemoteObject](#iremoteobject)。 |

**示例:**

  ```
  class TestAbility extends rpc.RemoteObject {
      asObject() {
          return this;
      }
  }
  ```

**示例:**

  ```
  class TestProxy {
      remote: rpc.RemoteObject;
      constructor(remote) {
          this.remote = remote;
      }
      asObject() {
          return this.remote;
      }
  }
  ```

## DeathRecipient

用于订阅远端对象的死亡通知。当被订阅该通知的远端对象死亡时,本端可收到消息,调用[onRemoteDied](#onremotedied)接口。远端对象死亡可以为远端对象所在进程死亡,远端对象所在设备关机或重启,当远端对象与本端对象属于不同设备时,也可为远端对象离开组网时。

### onRemoteDied

onRemoteDied(): void

在成功添加死亡通知订阅后,当远端对象死亡时,将自动调用本方法。

**系统能力**:SystemCapability.Communication.IPC.Core

**示例:**

  ```
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
      }
  }
  ```

## RequestResult<sup>9+</sup>

发送请求的响应结果。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。

C
crazy_hu 已提交
5741 5742 5743 5744 5745 5746
  | 参数名  | 类型            | 必填 | 说明                                   |
  | ------- | --------------- | ---- | ------------------------------------- |
  | errCode | number          | 是   | 错误码。                              |
  | code    | number          | 是   | 消息代码。                            |
  | data    | MessageSequence | 是   | 发送给对端进程的MessageSequence对象。 |
  | reply   | MessageSequence | 是   | 对端进程返回的MessageSequence对象。   |
W
wanghaoxu 已提交
5747 5748 5749

## SendRequestResult<sup>8+(deprecated)</sup>

5750 5751 5752
>从API version 9 开始不再维护,建议使用[RequestResult](#requestresult9)类替代。

发送请求的响应结果。
W
wanghaoxu 已提交
5753 5754 5755

**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。

C
crazy_hu 已提交
5756 5757 5758 5759 5760 5761
  | 参数名  | 类型          | 必填 | 说明                                 |
  | ------- | ------------- | ---- | ----------------------------------- |
  | errCode | number        | 是   | 错误码。                            |
  | code    | number        | 是   | 消息代码。                          |
  | data    | MessageParcel | 是   | 发送给对端进程的MessageParcel对象。 |
  | reply   | MessageParcel | 是   | 对端进程返回的MessageParcel对象。   |
W
wanghaoxu 已提交
5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774

## IRemoteObject

该接口可用于查询或获取接口描述符、添加或删除死亡通知、转储对象状态到特定文件、发送消息。

### getLocalInterface<sup>9+</sup>

getLocalInterface(descriptor: string): IRemoteBroker

查询接口。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5775
**参数:**
W
wanghaoxu 已提交
5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786

  | 参数名     | 类型   | 必填 | 说明                 |
  | ---------- | ------ | ---- | -------------------- |
  | descriptor | string | 是   | 接口描述符的字符串。 |

**返回值:**

  | 类型          | 说明                                          |
  | ------------- | --------------------------------------------- |
  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |

5787
### queryLocalInterface<sup>(deprecated)</sup>
W
wanghaoxu 已提交
5788

5789 5790
>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。

W
wanghaoxu 已提交
5791 5792
queryLocalInterface(descriptor: string): IRemoteBroker

5793
查询接口。
W
wanghaoxu 已提交
5794 5795 5796

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5797
**参数:**
W
wanghaoxu 已提交
5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811

  | 参数名     | 类型   | 必填 | 说明                 |
  | ---------- | ------ | ---- | -------------------- |
  | descriptor | string | 是   | 接口描述符的字符串。 |

**返回值:**

  | 类型          | 说明                                          |
  | ------------- | --------------------------------------------- |
  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |


### sendRequest<sup>(deprecated)</sup>

5812 5813
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wanghaoxu 已提交
5814 5815
sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): boolean

5816
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
W
wanghaoxu 已提交
5817 5818 5819

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5820
**参数:**
W
wanghaoxu 已提交
5821 5822 5823 5824

  | 参数名  | 类型 | 必填 | 说明  |
  | ------- | ------------------------------- | ---- | ---- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5825 5826
  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |

**返回值:**

  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 返回一个布尔值,true表示成功,false表示失败。 |


### sendRequest<sup>8+(deprecated)</sup>

5838 5839
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wanghaoxu 已提交
5840 5841
sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): Promise&lt;SendRequestResult&gt;

5842
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
W
wanghaoxu 已提交
5843 5844 5845

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5846
**参数:**
W
wanghaoxu 已提交
5847 5848 5849 5850

  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5851 5852
  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |

**返回值:**

  | 类型                             | 说明                                          |
  | -------------------------------- | --------------------------------------------- |
  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |


### sendMessageRequest<sup>9+</sup>

sendMessageRequest(code : number, data : MessageSequence, reply : MessageSequence, options : MessageOption): Promise&lt;RequestResult&gt;

以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5870
**参数:**
W
wanghaoxu 已提交
5871 5872 5873 5874

  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5875 5876
  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
  | reply   | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
W
wanghaoxu 已提交
5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |

**返回值:**

  | 类型                         | 说明                                      |
  | ---------------------------- | ----------------------------------------- |
  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是requestResult实例。 |


### sendMessageRequest<sup>9+</sup>

sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void

以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5894
**参数:**
W
wanghaoxu 已提交
5895 5896 5897 5898

  | 参数名   | 类型                               | 必填 | 说明                                                                                   |
  | -------- | ---------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code     | number                             | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5899 5900
  | data     | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
  | reply    | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
W
wanghaoxu 已提交
5901 5902 5903 5904 5905 5906
  | options  | [MessageOption](#messageoption)    | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
  | callback | AsyncCallback&lt;RequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |


### sendRequest<sup>8+(deprecated)</sup>

5907 5908
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wanghaoxu 已提交
5909 5910
sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void

5911
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
W
wanghaoxu 已提交
5912 5913 5914

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5915
**参数:**
W
wanghaoxu 已提交
5916 5917 5918 5919

  | 参数名   | 类型                                   | 必填 | 说明                                                                                   |
  | -------- | -------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code     | number                                 | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
5920 5921
  | data     | [MessageParcel](#messageparceldeprecated)        | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply    | [MessageParcel](#messageparceldeprecated)        | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933
  | options  | [MessageOption](#messageoption)        | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
  | callback | AsyncCallback&lt;SendRequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |


### registerDeathRecipient<sup>9+</sup>

registerDeathRecipient(recipient: DeathRecipient, flags: number): void

注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5934
**参数:**
W
wanghaoxu 已提交
5935 5936 5937 5938 5939 5940

  | 参数名    | 类型                              | 必填 | 说明           |
  | --------- | --------------------------------- | ---- | -------------- |
  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
  | flags     | number                            | 是   | 死亡通知标志。 |

W
wanghaoxu 已提交
5941 5942
**错误码:**

C
crazy_hu 已提交
5943
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
5944

W
wanghaoxu 已提交
5945 5946 5947
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900008 | proxy or remote object is invalid |
W
wanghaoxu 已提交
5948 5949


5950
### addDeathrecipient<sup>(deprecated)</sup>
W
wanghaoxu 已提交
5951

5952 5953
>从API version 9 开始不再维护,建议使用[registerDeathRecipient](#registerdeathrecipient9)类替代。

W
wanghaoxu 已提交
5954 5955
addDeathRecipient(recipient: DeathRecipient, flags: number): boolean

5956
注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
W
wanghaoxu 已提交
5957 5958 5959

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5960
**参数:**
W
wanghaoxu 已提交
5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981

  | 参数名    | 类型                              | 必填 | 说明           |
  | --------- | --------------------------------- | ---- | -------------- |
  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
  | flags     | number                            | 是   | 死亡通知标志。 |

**返回值:**

  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 如果回调注册成功,则返回true;否则返回false。 |


### unregisterDeathRecipient<sup>9+</sup>

removeDeathRecipient(recipient: DeathRecipient, flags: number): void

注销用于接收远程对象死亡通知的回调。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
5982
**参数:**
W
wanghaoxu 已提交
5983 5984 5985 5986 5987 5988

  | 参数名    | 类型                              | 必填 | 说明           |
  | --------- | --------------------------------- | ---- | -------------- |
  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
  | flags     | number                            | 是   | 死亡通知标志。 |

W
wanghaoxu 已提交
5989 5990
**错误码:**

C
crazy_hu 已提交
5991
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
5992

W
wanghaoxu 已提交
5993 5994 5995
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900008 | proxy or remote object is invalid |
W
wanghaoxu 已提交
5996 5997


5998
### removeDeathRecipient<sup>(deprecated)</sup>
W
wanghaoxu 已提交
5999

6000 6001
>从API version 9 开始不再维护,建议使用[unregisterDeathRecipient](#unregisterdeathrecipient9)类替代。

W
wanghaoxu 已提交
6002 6003
removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean

6004
注销用于接收远程对象死亡通知的回调。
W
wanghaoxu 已提交
6005 6006 6007

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6008
**参数:**
W
wanghaoxu 已提交
6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035

  | 参数名    | 类型                              | 必填 | 说明           |
  | --------- | --------------------------------- | ---- | -------------- |
  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
  | flags     | number                            | 是   | 死亡通知标志。 |

**返回值:**

  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 如果回调成功注销,则返回true;否则返回false。 |


### getDescriptor<sup>9+</sup>

getDescriptor(): string

获取对象的接口描述符。接口描述符为字符串。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明             |
  | ------ | ---------------- |
  | string | 返回接口描述符。 |

W
wanghaoxu 已提交
6036 6037
**错误码:**

C
crazy_hu 已提交
6038
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
6039

W
wanghaoxu 已提交
6040 6041 6042
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900008 | proxy or remote object is invalid |
W
wanghaoxu 已提交
6043 6044


6045
### getInterfaceDescriptor<sup>(deprecated)</sup>
W
wanghaoxu 已提交
6046

6047 6048
>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。

W
wanghaoxu 已提交
6049 6050
getInterfaceDescriptor(): string

6051
获取对象的接口描述符。接口描述符为字符串。
W
wanghaoxu 已提交
6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明             |
  | ------ | ---------------- |
  | string | 返回接口描述符。 |


### isObjectDead

isObjectDead(): boolean

检查当前对象是否死亡。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型    | 说明                                        |
  | ------- | ------------------------------------------- |
  | boolean | 如果对象已死亡,则返回true;否则返回false。 |


## RemoteProxy

实现IRemoteObject代理对象。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。

6083
| 名称                  | 值                      | 说明                              |
W
wanghaoxu 已提交
6084 6085 6086 6087 6088 6089 6090 6091 6092 6093
| --------------------- | ----------------------- | --------------------------------- |
| PING_TRANSACTION      | 1599098439 (0x5f504e47) | 内部指令码,用于测试IPC服务正常。 |
| DUMP_TRANSACTION      | 1598311760 (0x5f444d50) | 内部指令码,获取Binder内部状态。  |
| INTERFACE_TRANSACTION | 1598968902 (0x5f4e5446) | 内部指令码,获取对端接口描述符。  |
| MIN_TRANSACTION_ID    | 1 (0x00000001)          | 最小有效指令码。                  |
| MAX_TRANSACTION_ID    | 16777215 (0x00FFFFFF)   | 最大有效指令码。                  |


### sendRequest<sup>(deprecated)</sup>

6094 6095
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wanghaoxu 已提交
6096 6097
sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): boolean

6098
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
W
wanghaoxu 已提交
6099 6100 6101

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6102
**参数:**
W
wanghaoxu 已提交
6103 6104 6105 6106

  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6107 6108
  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |

**返回值:**

  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 返回一个布尔值,true表示成功,false表示失败。 |

**示例:**

  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
  };
  FA.connectAbility(want, connect);
  let option = new rpc.MessageOption();
  let data = rpc.MessageParcel.create();
  let reply = rpc.MessageParcel.create();
  data.writeInt(1);
  data.writeString("hello");
  let ret: boolean = proxy.sendRequest(1, data, reply, option);
  if (ret) {
      console.log("sendRequest got result");
      let msg = reply.readString();
      console.log("RPCTest: reply msg: " + msg);
  } else {
      console.log("RPCTest: sendRequest failed");
  }
  console.log("RPCTest: sendRequest ends, reclaim parcel");
  data.reclaim();
  reply.reclaim();
  ```


### sendMessageRequest<sup>9+</sup>

sendMessageRequest(code : number, data : MessageSequence, reply : MessageSequence, options : MessageOption): Promise&lt;RequestResult&gt;
以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6165
**参数:**
W
wanghaoxu 已提交
6166 6167 6168 6169

  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6170 6171
  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
  | reply   | [MessageSequence](#messagesequence9)  | 是   | 接收应答数据的MessageSequence对象。                                                    |
W
wanghaoxu 已提交
6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |

**返回值:**

  | 类型                         | 说明                                      |
  | ---------------------------- | ----------------------------------------- |
  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是requestResult实例。 |

**示例:**

  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
  };
  FA.connectAbility(want, connect);
  let option = new rpc.MessageOption();
  let data = rpc.MessageSequence.create();
  let reply = rpc.MessageSequence.create();
  data.writeInt(1);
  data.writeString("hello");
  proxy.sendMessageRequest(1, data, reply, option)
      .then(function(result) {
          if (result.errCode === 0) {
              console.log("sendMessageRequest got result");
              result.reply.readException();
              let msg = result.reply.readString();
              console.log("RPCTest: reply msg: " + msg);
          } else {
              console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
          }
      }).catch(function(e) {
          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
      }).finally (() => {
          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
          data.reclaim();
          reply.reclaim();
      });
  ```


### sendRequest<sup>8+(deprecated)</sup>

6229 6230
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wanghaoxu 已提交
6231 6232
sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): Promise&lt;SendRequestResult&gt;

6233
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
W
wanghaoxu 已提交
6234 6235 6236

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6237
**参数:**
W
wanghaoxu 已提交
6238 6239 6240 6241

  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6242 6243
  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |

**返回值:**

  | 类型                             | 说明                                          |
  | -------------------------------- | --------------------------------------------- |
  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |

**示例:**

  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
  };
  FA.connectAbility(want, connect);
  let option = new rpc.MessageOption();
  let data = rpc.MessageParcel.create();
  let reply = rpc.MessageParcel.create();
  data.writeInt(1);
  data.writeString("hello");
  proxy.sendRequest(1, data, reply, option)
      .then(function(result) {
          if (result.errCode === 0) {
              console.log("sendRequest got result");
              result.reply.readException();
              let msg = result.reply.readString();
              console.log("RPCTest: reply msg: " + msg);
          } else {
              console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
          }
      }).catch(function(e) {
          console.log("RPCTest: sendRequest got exception: " + e.message);
      }).finally (() => {
          console.log("RPCTest: sendRequest ends, reclaim parcel");
          data.reclaim();
          reply.reclaim();
      });
  ```

### sendMessageRequest<sup>9+</sup>

sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void

以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendMessageRequest返回后的某个时机执行回调,回复内容在RequestResult的reply报文里。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6306
**参数:**
W
wanghaoxu 已提交
6307 6308 6309 6310

  | 参数名   | 类型                               | 必填 | 说明                                                                                   |
  | -------- | ---------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code     | number                             | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6311 6312
  | data     | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
  | reply    | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
W
wanghaoxu 已提交
6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363
  | options  | [MessageOption](#messageoption)    | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
  | callback | AsyncCallback&lt;RequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |


**示例:**

  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
  };
  function sendRequestCallback(result) {
      if (result.errCode === 0) {
          console.log("sendRequest got result");
          result.reply.readException();
          let msg = result.reply.readString();
          console.log("RPCTest: reply msg: " + msg);
      } else {
          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
      }
      console.log("RPCTest: sendRequest ends, reclaim parcel");
      result.data.reclaim();
      result.reply.reclaim();
  }
  FA.connectAbility(want, connect);
  let option = new rpc.MessageOption();
  let data = rpc.MessageSequence.create();
  let reply = rpc.MessageSequence.create();
  data.writeInt(1);
  data.writeString("hello");
  try {
      proxy.sendRequest(1, data, reply, option, sendRequestCallback);
  } catch(error) {
      console.info("rpc send sequence request fail, errorCode " + error.code);
      console.info("rpc send sequence request fail, errorMessage " + error.message);
  }
  ```
Z
zengyawen 已提交
6364

Y
yangguangzhao 已提交
6365

W
wanghaoxu 已提交
6366
### sendRequest<sup>8+(deprecated)</sup>
W
wangqinxiao 已提交
6367

6368 6369
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wanghaoxu 已提交
6370
sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void
6371
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
Z
zengyawen 已提交
6372

W
wanghaoxu 已提交
6373
**系统能力**:SystemCapability.Communication.IPC.Core
W
wangqinxiao 已提交
6374

W
wanghaoxu 已提交
6375
**参数:**
Z
zengyawen 已提交
6376

W
wanghaoxu 已提交
6377 6378 6379
  | 参数名   | 类型                                   | 必填 | 说明                                                                                   |
  | -------- | -------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code     | number                                 | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
6380 6381
  | data     | [MessageParcel](#messageparceldeprecated)        | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply    | [MessageParcel](#messageparceldeprecated)        | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
6382 6383
  | options  | [MessageOption](#messageoption)        | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
  | callback | AsyncCallback&lt;SendRequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |
Y
yangguangzhao 已提交
6384 6385

**示例:**
Y
yangguangzhao 已提交
6386

Z
zengyawen 已提交
6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
Y
yangguangzhao 已提交
6403 6404
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
Z
zengyawen 已提交
6405
  };
W
wanghaoxu 已提交
6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418
  function sendRequestCallback(result) {
      if (result.errCode === 0) {
          console.log("sendRequest got result");
          result.reply.readException();
          let msg = result.reply.readString();
          console.log("RPCTest: reply msg: " + msg);
      } else {
          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
      }
      console.log("RPCTest: sendRequest ends, reclaim parcel");
      result.data.reclaim();
      result.reply.reclaim();
  }
Z
zengyawen 已提交
6419 6420 6421 6422 6423 6424
  FA.connectAbility(want, connect);
  let option = new rpc.MessageOption();
  let data = rpc.MessageParcel.create();
  let reply = rpc.MessageParcel.create();
  data.writeInt(1);
  data.writeString("hello");
W
wanghaoxu 已提交
6425
  proxy.sendRequest(1, data, reply, option, sendRequestCallback);
Z
zengyawen 已提交
6426 6427
  ```

6428

W
wanghaoxu 已提交
6429
### getLocalInterface<sup>9+</sup>
W
wangqinxiao 已提交
6430

W
wanghaoxu 已提交
6431
getLocalInterface(interface: string): IRemoteBroker
Y
yangguangzhao 已提交
6432

W
wanghaoxu 已提交
6433
查询并获取当前接口描述符对应的本地接口对象。
Y
yangguangzhao 已提交
6434 6435 6436

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6437
**参数:**
W
wangqinxiao 已提交
6438

W
wanghaoxu 已提交
6439 6440 6441
  | 参数名    | 类型   | 必填 | 说明                   |
  | --------- | ------ | ---- | ---------------------- |
  | interface | string | 是   | 需要查询的接口描述符。 |
Y
yangguangzhao 已提交
6442 6443

**返回值:**
W
wangqinxiao 已提交
6444

W
wanghaoxu 已提交
6445 6446 6447 6448
  | 类型          | 说明                                       |
  | ------------- | ------------------------------------------ |
  | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 |

Y
yangguangzhao 已提交
6449 6450

**示例:**
Y
yangguangzhao 已提交
6451

Z
zengyawen 已提交
6452 6453 6454 6455 6456 6457 6458 6459
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
W
wanghaoxu 已提交
6460
      onDisconnect: function (elementName) {
Z
zengyawen 已提交
6461 6462 6463 6464 6465 6466 6467
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
W
wanghaoxu 已提交
6468 6469
      "bundleName":"com.ohos.server",
      "abilityName":"com.ohos.server.MainAbility",
Z
zengyawen 已提交
6470 6471
  };
  FA.connectAbility(want, connect);
W
wanghaoxu 已提交
6472 6473 6474 6475 6476 6477 6478
  try {
      let broker = proxy.getLocalInterface("testObject");
      console.log("RpcClient: getLocalInterface is " + broker);
  } catch(error) {
      console.info("rpc get local interface fail, errorCode " + error.code);
      console.info("rpc get local interface fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
6479 6480
  ```

6481

6482
### queryLocalInterface<sup>(deprecated)</sup>
W
wanghaoxu 已提交
6483

6484 6485
>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。

W
wanghaoxu 已提交
6486
queryLocalInterface(interface: string): IRemoteBroker
6487

6488
查询并获取当前接口描述符对应的本地接口对象。
6489 6490 6491

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6492
**参数:**
W
wangqinxiao 已提交
6493

W
wanghaoxu 已提交
6494 6495 6496
  | 参数名    | 类型   | 必填 | 说明                   |
  | --------- | ------ | ---- | ---------------------- |
  | interface | string | 是   | 需要查询的接口描述符。 |
6497 6498

**返回值:**
W
wangqinxiao 已提交
6499

W
wanghaoxu 已提交
6500 6501 6502
  | 类型          | 说明                                       |
  | ------------- | ------------------------------------------ |
  | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 |
6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513

**示例:**

  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
W
wanghaoxu 已提交
6514
      onDisconnect: function (elementName) {
6515 6516 6517 6518 6519 6520 6521
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
W
wanghaoxu 已提交
6522 6523
      "bundleName":"com.ohos.server",
      "abilityName":"com.ohos.server.MainAbility",
6524 6525
  };
  FA.connectAbility(want, connect);
W
wanghaoxu 已提交
6526 6527
  let broker = proxy.queryLocalInterface("testObject");
  console.log("RpcClient: queryLocalInterface is " + broker);
6528
  ```
Z
zengyawen 已提交
6529 6530


W
wanghaoxu 已提交
6531 6532 6533
### registerDeathRecipient<sup>9+</sup>

registerDeathRecipient(recipient: DeathRecipient, flags: number): void
Z
zengyawen 已提交
6534

W
wanghaoxu 已提交
6535
注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。
Z
zengyawen 已提交
6536

Y
yangguangzhao 已提交
6537
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
6538

W
wanghaoxu 已提交
6539
**参数:**
W
wangqinxiao 已提交
6540

W
wanghaoxu 已提交
6541 6542 6543 6544 6545
  | 参数名    | 类型                              | 必填 | 说明           |
  | --------- | --------------------------------- | ---- | -------------- |
  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注册的回调。 |
  | flags     | number                            | 是   | 死亡通知标志。 |

W
wanghaoxu 已提交
6546 6547
**错误码:**

C
crazy_hu 已提交
6548
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
6549

W
wanghaoxu 已提交
6550 6551 6552
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900008 | proxy or remote object is invalid |
Z
zengyawen 已提交
6553

Y
yangguangzhao 已提交
6554
**示例:**
Y
yangguangzhao 已提交
6555

Z
zengyawen 已提交
6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
Y
yangguangzhao 已提交
6572 6573
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
Z
zengyawen 已提交
6574
  };
W
wanghaoxu 已提交
6575 6576 6577 6578
  FA.connectAbility(want, connect);
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
Z
zengyawen 已提交
6579 6580
      }
  }
W
wanghaoxu 已提交
6581 6582 6583 6584
  let deathRecipient = new MyDeathRecipient();
  try {
      proxy.registerDeathRecippient(deathRecipient, 0);
  } catch(error) {
C
crazy_hu 已提交
6585 6586
      console.info("proxy register deathRecipient fail, errorCode " + error.code);
      console.info("proxy register deathRecipient fail, errorMessage " + error.message);
W
wanghaoxu 已提交
6587
  }
Z
zengyawen 已提交
6588 6589 6590
  ```


6591
### addDeathRecippient<sup>(deprecated)</sup>
Z
zengyawen 已提交
6592

6593 6594
>从API version 9 开始不再维护,建议使用[registerDeathRecipient](#registerdeathrecipient9)类替代。

W
wanghaoxu 已提交
6595
addDeathRecipient(recipient : DeathRecipient, flags : number): boolean
Z
zengyawen 已提交
6596

6597
注册用于接收远程对象死亡通知的回调,增加proxy对象上的死亡通知。
Z
zengyawen 已提交
6598

Y
yangguangzhao 已提交
6599
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
6600

W
wanghaoxu 已提交
6601
**参数:**
W
wangqinxiao 已提交
6602

W
wanghaoxu 已提交
6603 6604 6605 6606
  | 参数名    | 类型                              | 必填 | 说明                              |
  | --------- | --------------------------------- | ---- | --------------------------------- |
  | recipient | [DeathRecipient](#deathrecipient) | 是   | 收件人表示要注册的回调。          |
  | flags     | number                            | 是   | 死亡通知标志。保留参数。设置为0。 |
Z
zengyawen 已提交
6607

Y
yangguangzhao 已提交
6608
**返回值:**
W
wangqinxiao 已提交
6609

W
wanghaoxu 已提交
6610 6611 6612
  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 如果回调注册成功,则返回true;否则返回false。 |
Z
zengyawen 已提交
6613

Y
yangguangzhao 已提交
6614
**示例:**
Y
yangguangzhao 已提交
6615

Z
zengyawen 已提交
6616 6617 6618 6619 6620 6621 6622 6623
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
W
wanghaoxu 已提交
6624
      onDisconnect: function(elementName) {
Z
zengyawen 已提交
6625 6626 6627 6628 6629 6630 6631
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
W
wanghaoxu 已提交
6632 6633
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
Z
zengyawen 已提交
6634 6635
  };
  FA.connectAbility(want, connect);
W
wanghaoxu 已提交
6636 6637 6638 6639 6640 6641 6642
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
      }
  }
  let deathRecipient = new MyDeathRecipient();
  proxy.addDeathRecippient(deathRecipient, 0);
Z
zengyawen 已提交
6643 6644
  ```

W
wanghaoxu 已提交
6645
### unregisterDeathRecipient<sup>9+</sup>
Z
zengyawen 已提交
6646

C
crazy_hu 已提交
6647
unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void
Z
zengyawen 已提交
6648

W
wanghaoxu 已提交
6649
注销用于接收远程对象死亡通知的回调。
Z
zengyawen 已提交
6650

Y
yangguangzhao 已提交
6651
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
6652

W
wanghaoxu 已提交
6653
**参数:**
W
wangqinxiao 已提交
6654

W
wanghaoxu 已提交
6655 6656 6657 6658
  | 参数名    | 类型                              | 必填 | 说明           |
  | --------- | --------------------------------- | ---- | -------------- |
  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的回调。 |
  | flags     | number                            | 是   | 死亡通知标志。 |
Z
zengyawen 已提交
6659

W
wanghaoxu 已提交
6660 6661
**错误码:**

C
crazy_hu 已提交
6662
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wangqinxiao 已提交
6663

W
wanghaoxu 已提交
6664 6665 6666
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900008 | proxy or remote object is invalid |
Z
zengyawen 已提交
6667

Y
yangguangzhao 已提交
6668
**示例:**
Y
yangguangzhao 已提交
6669

Z
zengyawen 已提交
6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
Y
yangguangzhao 已提交
6686 6687
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
Z
zengyawen 已提交
6688 6689 6690 6691
  };
  FA.connectAbility(want, connect);
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
6692
          console.log("server died");
Z
zengyawen 已提交
6693 6694 6695
      }
  }
  let deathRecipient = new MyDeathRecipient();
W
wanghaoxu 已提交
6696 6697 6698 6699
  try {
      proxy.registerDeathRecippient(deathRecipient, 0);
      proxy.unregisterDeathRecippient(deathRecipient, 0);
  } catch(error) {
C
crazy_hu 已提交
6700 6701
      console.info("proxy register deathRecipient fail, errorCode " + error.code);
      console.info("proxy register deathRecipient fail, errorMessage " + error.message);
W
wanghaoxu 已提交
6702
  }
Z
zengyawen 已提交
6703 6704 6705
  ```


6706
### removeDeathRecipient<sup>(deprecated)</sup>
Z
zengyawen 已提交
6707

6708 6709
>从API version 9 开始不再维护,建议使用[unregisterDeathRecipient](#unregisterdeathrecipient9)类替代。

Z
zengyawen 已提交
6710 6711
removeDeathRecipient(recipient : DeathRecipient, flags : number): boolean

6712
注销用于接收远程对象死亡通知的回调。
Z
zengyawen 已提交
6713

Y
yangguangzhao 已提交
6714
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
6715

W
wanghaoxu 已提交
6716
**参数:**
W
wangqinxiao 已提交
6717

W
wanghaoxu 已提交
6718 6719 6720 6721
  | 参数名    | 类型                              | 必填 | 说明                              |
  | --------- | --------------------------------- | ---- | --------------------------------- |
  | recipient | [DeathRecipient](#deathrecipient) | 是   | 要注销的死亡回调。                |
  | flags     | number                            | 是   | 死亡通知标志。保留参数。设置为0。 |
Z
zengyawen 已提交
6722

Y
yangguangzhao 已提交
6723
**返回值:**
W
wangqinxiao 已提交
6724

W
wanghaoxu 已提交
6725 6726
  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
Y
yangguangzhao 已提交
6727
  | boolean | 如果回调成功注销,则返回true;否则返回false。 |
Z
zengyawen 已提交
6728

Y
yangguangzhao 已提交
6729
**示例:**
Y
yangguangzhao 已提交
6730

Z
zengyawen 已提交
6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
Y
yangguangzhao 已提交
6747 6748
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
Z
zengyawen 已提交
6749 6750 6751 6752
  };
  FA.connectAbility(want, connect);
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
6753
          console.log("server died");
Z
zengyawen 已提交
6754 6755 6756 6757 6758 6759 6760 6761
      }
  }
  let deathRecipient = new MyDeathRecipient();
  proxy.addDeathRecippient(deathRecipient, 0);
  proxy.removeDeathRecipient(deathRecipient, 0);
  ```


W
wanghaoxu 已提交
6762
### getDescriptor<sup>9+</sup>
Z
zengyawen 已提交
6763 6764 6765

getInterfaceDescriptor(): string

W
wanghaoxu 已提交
6766
获取对象的接口描述符。接口描述符为字符串。
Z
zengyawen 已提交
6767

Y
yangguangzhao 已提交
6768
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
6769

Y
yangguangzhao 已提交
6770
**返回值:**
W
wangqinxiao 已提交
6771

W
wanghaoxu 已提交
6772 6773 6774 6775
  | 类型   | 说明             |
  | ------ | ---------------- |
  | string | 返回接口描述符。 |

W
wanghaoxu 已提交
6776 6777
**错误码:**

C
crazy_hu 已提交
6778
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
6779

W
wanghaoxu 已提交
6780 6781 6782
  | 错误码ID | 错误信息 |
  | -------- | ------- |
  | 1900008 | proxy or remote object is invalid |
C
crazy_hu 已提交
6783
  | 1900007 | communication failed              |
W
wanghaoxu 已提交
6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816

**示例:**

  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
  };
  FA.connectAbility(want, connect);
  try {
      let descriptor = proxy.getDescriptor();
      console.log("RpcClient: descriptor is " + descriptor);
  } catch(error) {
      console.info("rpc get interface descriptor fail, errorCode " + error.code);
      console.info("rpc get interface descriptor fail, errorMessage " + error.message);
  }
  ```


6817
### getInterfaceDescriptor<sup>(deprecated)</sup>
W
wanghaoxu 已提交
6818

6819 6820
>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。

W
wanghaoxu 已提交
6821 6822
getInterfaceDescriptor(): string

6823
查询当前代理对象接口的描述符。
W
wanghaoxu 已提交
6824 6825 6826 6827 6828 6829 6830

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明               |
  | ------ | ------------------ |
Y
yangguangzhao 已提交
6831
  | string | 当前的接口描述符。 |
Z
zengyawen 已提交
6832

Y
yangguangzhao 已提交
6833
**示例:**
Y
yangguangzhao 已提交
6834

Z
zengyawen 已提交
6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
Y
yangguangzhao 已提交
6851 6852
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
Z
zengyawen 已提交
6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865
  };
  FA.connectAbility(want, connect);
  let descriptor = proxy.getInterfaceDescriptor();
  console.log("RpcClient: descriptor is " + descriptor);
  ```


### isObjectDead

isObjectDead(): boolean

指示对应的RemoteObject是否死亡。

Y
yangguangzhao 已提交
6866
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
6867

Y
yangguangzhao 已提交
6868
**返回值:**
W
wangqinxiao 已提交
6869

W
wanghaoxu 已提交
6870 6871
  | 类型    | 说明                                                      |
  | ------- | --------------------------------------------------------- |
Y
yangguangzhao 已提交
6872
  | boolean | 如果对应的RemoteObject已经死亡,返回true,否则返回false。 |
Z
zengyawen 已提交
6873

Y
yangguangzhao 已提交
6874
**示例:**
Y
yangguangzhao 已提交
6875

Z
zengyawen 已提交
6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891
  ```
  import FA from "@ohos.ability.featureAbility";
  let proxy;
  let connect = {
      onConnect: function(elementName, remoteProxy) {
          console.log("RpcClient: js onConnect called.");
          proxy = remoteProxy;
      },
      onDisconnect: function(elementName) {
          console.log("RpcClient: onDisconnect");
      },
      onFailed: function() {
          console.log("RpcClient: onFailed");
      }
  };
  let want = {
Y
yangguangzhao 已提交
6892 6893
      "bundleName": "com.ohos.server",
      "abilityName": "com.ohos.server.MainAbility",
Z
zengyawen 已提交
6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904
  };
  FA.connectAbility(want, connect);
  let isDead = proxy.isObjectDead();
  console.log("RpcClient: isObjectDead is " + isDead);
  ```


## MessageOption

公共消息选项(int标志,int等待时间),使用标志中指定的标志构造指定的MessageOption对象。

Y
yangguangzhao 已提交
6905
**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。
Z
zengyawen 已提交
6906

6907
  | 名称          | 值   | 说明                                                        |
W
wanghaoxu 已提交
6908
  | ------------- | ---- | ----------------------------------------------------------- |
6909 6910
  | TF_SYNC       | 0    | 同步调用标识。                                                  |
  | TF_ASYNC      | 1    | 异步调用标识。                                                  |
W
wanghaoxu 已提交
6911
  | TF_ACCEPT_FDS | 0x10 | 指示sendMessageRequest<sup>9+</sup>接口可以返回文件描述符。 |
6912
  | TF_WAIT_TIME  | 8    | 默认等待时间(单位/秒)。                                          |
W
wanghaoxu 已提交
6913 6914 6915 6916 6917 6918 6919 6920 6921 6922


### constructor<sup>9+</sup>

constructor(async?: boolean);

MessageOption构造函数。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6923
**参数:**
W
wanghaoxu 已提交
6924 6925 6926 6927

  | 参数名    | 类型   | 必填 | 说明                                   |
  | --------- | ------ | ---- | -------------------------------------- |
  | syncFlags | number | 否   | 同步调用或异步调用标志。默认同步调用。 |
Z
zengyawen 已提交
6928 6929 6930 6931 6932 6933 6934 6935


### constructor

constructor(syncFlags?: number, waitTime = TF_WAIT_TIME)

MessageOption构造函数。

Y
yangguangzhao 已提交
6936 6937
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6938
**参数:**
W
wangqinxiao 已提交
6939

W
wanghaoxu 已提交
6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965
  | 参数名    | 类型   | 必填 | 说明                                          |
  | --------- | ------ | ---- | --------------------------------------------- |
  | syncFlags | number | 否   | 同步调用或异步调用标志。默认同步调用。        |
  | waitTime  | number | 否   | 调用rpc最长等待时间。默认&nbsp;TF_WAIT_TIME。 |


### isAsync<sup>9+</sup>

isAsync(): boolean;

获取SendMessageRequest调用中确定同步或是异步的标志。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型    | 说明                                 |
  | ------- | ------------------------------------ |
  | boolean | 调用成功返回同步调用或异步调用标志。 |


### setAsync<sup>9+</sup>

setAsync(async: boolean): void;

设置SendMessageRequest调用中确定同步或是异步的标志。
Z
zengyawen 已提交
6966

W
wanghaoxu 已提交
6967 6968
**系统能力**:SystemCapability.Communication.IPC.Core

Z
zengyawen 已提交
6969 6970 6971 6972 6973 6974 6975

### getFlags

getFlags(): number

获取同步调用或异步调用标志。

Y
yangguangzhao 已提交
6976
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
6977

Y
yangguangzhao 已提交
6978
**返回值:**
W
wangqinxiao 已提交
6979

W
wanghaoxu 已提交
6980 6981
  | 类型   | 说明                                 |
  | ------ | ------------------------------------ |
Y
yangguangzhao 已提交
6982
  | number | 调用成功返回同步调用或异步调用标志。 |
Z
zengyawen 已提交
6983 6984 6985 6986 6987 6988 6989 6990


### setFlags

setFlags(flags: number): void

设置同步调用或异步调用标志。

Y
yangguangzhao 已提交
6991 6992
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
6993
**参数:**
W
wangqinxiao 已提交
6994

W
wanghaoxu 已提交
6995 6996 6997
  | 参数名 | 类型   | 必填 | 说明                     |
  | ------ | ------ | ---- | ------------------------ |
  | flags  | number | 是   | 同步调用或异步调用标志。 |
Z
zengyawen 已提交
6998 6999 7000 7001 7002 7003 7004 7005


### getWaitTime

getWaitTime(): number

获取rpc调用的最长等待时间。

Y
yangguangzhao 已提交
7006 7007
**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
7008
**返回值:**
W
wangqinxiao 已提交
7009

W
wanghaoxu 已提交
7010 7011
  | 类型   | 说明              |
  | ------ | ----------------- |
Y
yangguangzhao 已提交
7012
  | number | rpc最长等待时间。 |
Z
zengyawen 已提交
7013 7014 7015 7016 7017 7018 7019 7020


### setWaitTime

setWaitTime(waitTime: number): void

设置rpc调用最长等待时间。

Y
yangguangzhao 已提交
7021 7022
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7023
**参数:**
W
wangqinxiao 已提交
7024

W
wanghaoxu 已提交
7025 7026 7027
  | 参数名   | 类型   | 必填 | 说明                  |
  | -------- | ------ | ---- | --------------------- |
  | waitTime | number | 是   | rpc调用最长等待时间。 |
Z
zengyawen 已提交
7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039


## IPCSkeleton

用于获取IPC上下文信息,包括获取UID和PID、获取本端和对端设备ID、检查接口调用是否在同一设备上。

### getContextObject

static getContextObject(): IRemoteObject

获取系统能力的管理者。

Y
yangguangzhao 已提交
7040
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
7041

Y
yangguangzhao 已提交
7042
**返回值:**
W
wangqinxiao 已提交
7043

W
wanghaoxu 已提交
7044 7045
  | 类型                            | 说明                 |
  | ------------------------------- | -------------------- |
Y
yangguangzhao 已提交
7046
  | [IRemoteObject](#iremoteobject) | 返回系统能力管理者。 |
Z
zengyawen 已提交
7047

Y
yangguangzhao 已提交
7048
**示例:**
Y
yangguangzhao 已提交
7049

Z
zengyawen 已提交
7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061
  ```
  let samgr = rpc.IPCSkeleton.getContextObject();
  console.log("RpcServer: getContextObject result: " + samgr);
  ```


### getCallingPid

static getCallingPid(): number

获取调用者的PID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的PID。

Y
yangguangzhao 已提交
7062
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
7063

Y
yangguangzhao 已提交
7064
**返回值:**
W
wangqinxiao 已提交
7065

W
wanghaoxu 已提交
7066 7067
  | 类型   | 说明              |
  | ------ | ----------------- |
Y
yangguangzhao 已提交
7068
  | number | 返回调用者的PID。 |
Z
zengyawen 已提交
7069

Y
yangguangzhao 已提交
7070
**示例:**
Y
yangguangzhao 已提交
7071

Z
zengyawen 已提交
7072 7073
  ```
  class Stub extends rpc.RemoteObject {
7074
      onRemoteMessageRequest(code, data, reply, option) {
Z
zengyawen 已提交
7075 7076 7077 7078
          let callerPid = rpc.IPCSkeleton.getCallingPid();
          console.log("RpcServer: getCallingPid result: " + callerPid);
          return true;
      }
W
wanghaoxu 已提交
7079
 }
Z
zengyawen 已提交
7080 7081 7082 7083 7084 7085 7086 7087 7088
  ```


### getCallingUid

static getCallingUid(): number

获取调用者的UID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的UID。

Y
yangguangzhao 已提交
7089
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
7090

Y
yangguangzhao 已提交
7091
**返回值:**
W
wangqinxiao 已提交
7092

W
wanghaoxu 已提交
7093 7094
  | 类型   | 说明              |
  | ------ | ----------------- |
Y
yangguangzhao 已提交
7095
  | number | 返回调用者的UID。 |
Z
zengyawen 已提交
7096

Y
yangguangzhao 已提交
7097
**示例:**
Y
yangguangzhao 已提交
7098

Z
zengyawen 已提交
7099 7100
  ```
  class Stub extends rpc.RemoteObject {
7101
      onRemoteMessageRequest(code, data, reply, option) {
Z
zengyawen 已提交
7102 7103 7104 7105 7106 7107 7108
          let callerUid = rpc.IPCSkeleton.getCallingUid();
          console.log("RpcServer: getCallingUid result: " + callerUid);
          return true;
      }
  }
  ```

W
wanghaoxu 已提交
7109

Y
yangguangzhao 已提交
7110
### getCallingTokenId<sup>8+</sup>
Y
yangguangzhao 已提交
7111 7112 7113 7114 7115 7116 7117 7118

static getCallingTokenId(): number;

获取调用者的TokenId,用于被调用方对调用方的身份校验。

**系统能力**:SystemCapability.Communication.IPC.Core


W
wanghaoxu 已提交
7119 7120
* 返回值
* 
Y
yangguangzhao 已提交
7121
    | 类型   | 说明                  |
W
wanghaoxu 已提交
7122 7123 7124
    | ------ | --------------------- |
    | number | 返回调用者的TokenId。 |
  
Y
yangguangzhao 已提交
7125 7126 7127 7128
* 示例

  ```
  class Stub extends rpc.RemoteObject {
7129
      onRemoteMessageRequest(code, data, reply, option) {
Y
yangguangzhao 已提交
7130 7131 7132 7133 7134 7135 7136
          let callerTokenId = rpc.IPCSkeleton.getCallingTokenId();
          console.log("RpcServer: getCallingTokenId result: " + callerTokenId);
          return true;
      }
  }
  ```

Z
zengyawen 已提交
7137

Y
yangguangzhao 已提交
7138
### getCallingDeviceID
Z
zengyawen 已提交
7139 7140 7141 7142 7143

static getCallingDeviceID(): string

获取调用者进程所在的设备ID。

Y
yangguangzhao 已提交
7144
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
7145

Y
yangguangzhao 已提交
7146
**返回值:**
W
wangqinxiao 已提交
7147

W
wanghaoxu 已提交
7148 7149
  | 类型   | 说明                         |
  | ------ | ---------------------------- |
Y
yangguangzhao 已提交
7150
  | string | 返回调用者进程所在的设备ID。 |
Z
zengyawen 已提交
7151

Y
yangguangzhao 已提交
7152
**示例:**
Y
yangguangzhao 已提交
7153

Z
zengyawen 已提交
7154 7155
  ```
  class Stub extends rpc.RemoteObject {
7156
      onRemoteMessageRequest(code, data, reply, option) {
Y
yangguangzhao 已提交
7157
          let callerDeviceID = rpc.IPCSkeleton.getCallingDeviceID();
Z
zengyawen 已提交
7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170
          console.log("RpcServer: callerDeviceID is: " + callerDeviceID);
          return true;
      }
  }
  ```


### getLocalDeviceID

static getLocalDeviceID(): string

获取本端设备ID。

Y
yangguangzhao 已提交
7171
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
7172

Y
yangguangzhao 已提交
7173
**返回值:**
W
wangqinxiao 已提交
7174

W
wanghaoxu 已提交
7175 7176
  | 类型   | 说明               |
  | ------ | ------------------ |
Y
yangguangzhao 已提交
7177
  | string | 返回本地设备的ID。 |
Z
zengyawen 已提交
7178

Y
yangguangzhao 已提交
7179
**示例:**
Y
yangguangzhao 已提交
7180

Z
zengyawen 已提交
7181 7182
  ```
  class Stub extends rpc.RemoteObject {
7183
      onRemoteMessageRequest(code, data, reply, option) {
Z
zengyawen 已提交
7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197
          let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID();
          console.log("RpcServer: localDeviceID is: " + localDeviceID);
          return true;
      }
  }
  ```


### isLocalCalling

static isLocalCalling(): boolean

检查当前通信对端是否是本设备的进程。

Y
yangguangzhao 已提交
7198
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
7199

Y
yangguangzhao 已提交
7200
**返回值:**
W
wangqinxiao 已提交
7201

W
wanghaoxu 已提交
7202 7203
  | 类型    | 说明                                                      |
  | ------- | --------------------------------------------------------- |
Y
yangguangzhao 已提交
7204
  | boolean | 如果调用是在同一设备上进行的,则返回true,否则返回false。 |
Z
zengyawen 已提交
7205

Y
yangguangzhao 已提交
7206
**示例:**
Y
yangguangzhao 已提交
7207

Z
zengyawen 已提交
7208 7209
  ```
  class Stub extends rpc.RemoteObject {
7210
      onRemoteMessageRequest(code, data, reply, option) {
Z
zengyawen 已提交
7211 7212 7213 7214 7215 7216 7217 7218
          let isLocalCalling = rpc.IPCSkeleton.isLocalCalling();
          console.log("RpcServer: isLocalCalling is: " + isLocalCalling);
          return true;
      }
  }
  ```


W
wanghaoxu 已提交
7219
### flushCmdBuffer<sup>9+</sup>
Z
zengyawen 已提交
7220

W
wanghaoxu 已提交
7221
static flushCmdBuffer(object : IRemoteObject): void
Z
zengyawen 已提交
7222 7223 7224

将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。

Y
yangguangzhao 已提交
7225 7226
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7227
**参数:**
W
wanghaoxu 已提交
7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245

  | 参数名 | 类型                            | 必填 | 说明                |
  | ------ | ------------------------------- | ---- | ------------------- |
  | object | [IRemoteObject](#iremoteobject) | 是   | 指定的RemoteProxy。 |


**示例:**

  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
  }
  let remoteObject = new TestRemoteObject("aaa");
  try {
      rpc.IPCSkeleton.flushCmdBuffer(remoteObject);
  } catch(error) {
C
crazy_hu 已提交
7246 7247
      console.info("proxy set calling identity fail, errorCode " + error.code);
      console.info("proxy set calling identity fail, errorMessage " + error.message);
W
wanghaoxu 已提交
7248 7249
  }
  ```
W
wangqinxiao 已提交
7250

Z
zengyawen 已提交
7251

7252
### flushCommands<sup>(deprecated)</sup>
W
wanghaoxu 已提交
7253

7254 7255
>从API version 9 开始不再维护,建议使用[flushCmdBuffer](#flushcmdbuffer9)类替代。

W
wanghaoxu 已提交
7256 7257
static flushCommands(object : IRemoteObject): number

7258
将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。
W
wanghaoxu 已提交
7259 7260 7261

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7262
**参数:**
W
wanghaoxu 已提交
7263 7264 7265 7266

  | 参数名 | 类型                            | 必填 | 说明                |
  | ------ | ------------------------------- | ---- | ------------------- |
  | object | [IRemoteObject](#iremoteobject) | 是   | 指定的RemoteProxy。 |
Z
zengyawen 已提交
7267

Y
yangguangzhao 已提交
7268
**返回值:**
W
wangqinxiao 已提交
7269

W
wanghaoxu 已提交
7270 7271
  | 类型   | 说明                                                                              |
  | ------ | --------------------------------------------------------------------------------- |
Y
yangguangzhao 已提交
7272
  | number | 如果操作成功,返回0;如果输入对象为空或RemoteObject,或者操作失败,返回错误代码。 |
Z
zengyawen 已提交
7273

Y
yangguangzhao 已提交
7274
**示例:**
Y
yangguangzhao 已提交
7275

Z
zengyawen 已提交
7276
  ```
Y
yangguangzhao 已提交
7277 7278
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
7279
          console.log("server died");
Y
yangguangzhao 已提交
7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296
      }
  }
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
  }
  let remoteObject = new TestRemoteObject("aaa");
Z
zengyawen 已提交
7297 7298 7299 7300 7301 7302 7303 7304 7305 7306
  let ret = rpc.IPCSkeleton.flushCommands(remoteObject);
  console.log("RpcServer: flushCommands result: " + ret);
  ```

### resetCallingIdentity

static resetCallingIdentity(): string

将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。

Y
yangguangzhao 已提交
7307
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
7308

Y
yangguangzhao 已提交
7309
**返回值:**
W
wangqinxiao 已提交
7310

W
wanghaoxu 已提交
7311 7312
  | 类型   | 说明                                 |
  | ------ | ------------------------------------ |
Y
yangguangzhao 已提交
7313
  | string | 返回包含远程用户的UID和PID的字符串。 |
Z
zengyawen 已提交
7314

Y
yangguangzhao 已提交
7315
**示例:**
Y
yangguangzhao 已提交
7316

Z
zengyawen 已提交
7317 7318
  ```
  class Stub extends rpc.RemoteObject {
7319
      onRemoteMessageRequest(code, data, reply, option) {
Z
zengyawen 已提交
7320 7321 7322 7323 7324 7325 7326 7327
          let callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
          console.log("RpcServer: callingIdentity is: " + callingIdentity);
          return true;
      }
  }
  ```


W
wanghaoxu 已提交
7328 7329 7330 7331 7332 7333 7334 7335
### restoreCallingIdentity<sup>9+</sup>

static restoreCallingIdentity(identity : string): void

将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7336
**参数:**
W
wanghaoxu 已提交
7337 7338 7339 7340 7341 7342 7343 7344 7345

  | 参数名   | 类型   | 必填 | 说明                                                               |
  | -------- | ------ | ---- | ------------------------------------------------------------------ |
  | identity | string | 是   | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |

**示例:**

  ```
  class Stub extends rpc.RemoteObject {
7346
      onRemoteMessageRequest(code, data, reply, option) {
W
wanghaoxu 已提交
7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359
          let callingIdentity = null;
          try {
              callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
              console.log("RpcServer: callingIdentity is: " + callingIdentity);
          } finally {
              rpc.IPCSkeleton.restoreCallingIdentity("callingIdentity ");
          }
          return true;
      }
  }
  ```


7360
### setCallingIdentity<sup>(deprecated)</sup>
Z
zengyawen 已提交
7361

7362 7363
>从API version 9 开始不再维护,建议使用[restoreCallingIdentity](#restorecallingidentity9)类替代。

Z
zengyawen 已提交
7364 7365
static setCallingIdentity(identity : string): boolean

7366
将UID和PID恢复为远程用户的UID和PID。它通常在使用resetCallingIdentity后调用,需要resetCallingIdentity返回的远程用户的UID和PID。
Z
zengyawen 已提交
7367

Y
yangguangzhao 已提交
7368 7369
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7370
**参数:**
W
wangqinxiao 已提交
7371

W
wanghaoxu 已提交
7372 7373 7374
  | 参数名   | 类型   | 必填 | 说明                                                               |
  | -------- | ------ | ---- | ------------------------------------------------------------------ |
  | identity | string | 是   | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |
Z
zengyawen 已提交
7375

Y
yangguangzhao 已提交
7376
**返回值:**
W
wangqinxiao 已提交
7377

W
wanghaoxu 已提交
7378 7379
  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
Y
yangguangzhao 已提交
7380
  | boolean | 如果操作成功,则返回true;否则返回false。 |
Z
zengyawen 已提交
7381

Y
yangguangzhao 已提交
7382
**示例:**
Y
yangguangzhao 已提交
7383

Z
zengyawen 已提交
7384 7385
  ```
  class Stub extends rpc.RemoteObject {
7386
      onRemoteMessageRequest(code, data, reply, option) {
Z
zengyawen 已提交
7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410
          let callingIdentity = null;
          try {
              callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
              console.log("RpcServer: callingIdentity is: " + callingIdentity);
          } finally {
              let ret = rpc.IPCSkeleton.setCallingIdentity("callingIdentity ");
              console.log("RpcServer: setCallingIdentity is: " + ret);
          }
          return true;
      }
  }
  ```


## RemoteObject

实现远程对象。服务提供者必须继承此类。

### constructor

constructor(descriptor: string)

RemoteObject构造函数。

Y
yangguangzhao 已提交
7411 7412
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7413
**参数:**
W
wangqinxiao 已提交
7414

W
wanghaoxu 已提交
7415 7416 7417
  | 参数名     | 类型   | 必填 | 说明         |
  | ---------- | ------ | ---- | ------------ |
  | descriptor | string | 是   | 接口描述符。 |
Z
zengyawen 已提交
7418 7419


Y
yangguangzhao 已提交
7420
### sendRequest<sup>(deprecated)</sup>
Z
zengyawen 已提交
7421

7422 7423
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wangqinxiao 已提交
7424 7425
sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): boolean

Z
zengyawen 已提交
7426 7427
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。

Y
yangguangzhao 已提交
7428 7429
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7430
**参数:**
W
wangqinxiao 已提交
7431

W
wanghaoxu 已提交
7432 7433 7434
  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7435 7436
  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
7437
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
Z
zengyawen 已提交
7438

Y
yangguangzhao 已提交
7439
**返回值:**
W
wangqinxiao 已提交
7440

W
wanghaoxu 已提交
7441 7442 7443
  | 类型    | 说明                                          |
  | ------- | --------------------------------------------- |
  | boolean | 返回一个布尔值,true表示成功,false表示失败。 |
Z
zengyawen 已提交
7444

Y
yangguangzhao 已提交
7445
**示例:**
Y
yangguangzhao 已提交
7446

Z
zengyawen 已提交
7447
  ```
Y
yangguangzhao 已提交
7448 7449
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
7450
          console.log("server died");
Y
yangguangzhao 已提交
7451 7452
      }
  }
Z
zengyawen 已提交
7453 7454 7455 7456
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
Y
yangguangzhao 已提交
7457 7458 7459 7460 7461 7462 7463 7464 7465
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
7466 7467 7468 7469 7470 7471 7472
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  let option = new rpc.MessageOption();
  let data = rpc.MessageParcel.create();
  let reply = rpc.MessageParcel.create();
  data.writeInt(1);
  data.writeString("hello");
Y
yangguangzhao 已提交
7473
  let ret: boolean = testRemoteObject.sendRequest(1, data, reply, option);
Y
yangguangzhao 已提交
7474 7475 7476 7477 7478 7479 7480 7481 7482 7483
  if (ret) {
      console.log("sendRequest got result");
      let msg = reply.readString();
      console.log("RPCTest: reply msg: " + msg);
  } else {
      console.log("RPCTest: sendRequest failed");
  }
  console.log("RPCTest: sendRequest ends, reclaim parcel");
  data.reclaim();
  reply.reclaim();
Z
zengyawen 已提交
7484 7485 7486
  ```


7487 7488
### sendRequest<sup>8+(deprecated)</sup>

7489 7490
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wangqinxiao 已提交
7491 7492
sendRequest(code : number, data : MessageParcel, reply : MessageParcel, options : MessageOption): Promise&lt;SendRequestResult&gt;

7493
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
Y
yangguangzhao 已提交
7494 7495 7496

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7497
**参数:**
W
wangqinxiao 已提交
7498

W
wanghaoxu 已提交
7499 7500 7501
  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7502 7503
  | data    | [MessageParcel](#messageparceldeprecated) | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply   | [MessageParcel](#messageparceldeprecated) | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
7504
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
Y
yangguangzhao 已提交
7505 7506

**返回值:**
W
wangqinxiao 已提交
7507

W
wanghaoxu 已提交
7508 7509 7510
  | 类型                             | 说明                                          |
  | -------------------------------- | --------------------------------------------- |
  | Promise&lt;SendRequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
Y
yangguangzhao 已提交
7511 7512

**示例:**
Y
yangguangzhao 已提交
7513

Z
zengyawen 已提交
7514
  ```
Y
yangguangzhao 已提交
7515 7516
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
7517
          console.log("server died");
Y
yangguangzhao 已提交
7518 7519
      }
  }
Z
zengyawen 已提交
7520 7521 7522 7523
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
Y
yangguangzhao 已提交
7524 7525 7526 7527 7528 7529 7530 7531 7532
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  let option = new rpc.MessageOption();
  let data = rpc.MessageParcel.create();
  let reply = rpc.MessageParcel.create();
  data.writeInt(1);
  data.writeString("hello");
  testRemoteObject.sendRequest(1, data, reply, option)
      .then(function(result) {
          if (result.errCode === 0) {
              console.log("sendRequest got result");
              result.reply.readException();
              let msg = result.reply.readString();
              console.log("RPCTest: reply msg: " + msg);
          } else {
              console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
          }
      }).catch(function(e) {
          console.log("RPCTest: sendRequest got exception: " + e.message);
      }).finally (() => {
          console.log("RPCTest: sendRequest ends, reclaim parcel");
          data.reclaim();
          reply.reclaim();
      });
  ```

W
wanghaoxu 已提交
7559
### sendMessageRequest<sup>9+</sup>
7560

W
wanghaoxu 已提交
7561
sendMessageRequest(code : number, data : MessageSequence, reply : MessageSequence, options : MessageOption): Promise&lt;RequestResult&gt;
7562

W
wanghaoxu 已提交
7563
以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。
7564 7565 7566

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7567
**参数:**
W
wangqinxiao 已提交
7568

W
wanghaoxu 已提交
7569 7570 7571
  | 参数名  | 类型                            | 必填 | 说明                                                                                   |
  | ------- | ------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code    | number                          | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7572 7573
  | data    | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
  | reply   | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
W
wanghaoxu 已提交
7574
  | options | [MessageOption](#messageoption) | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
7575 7576

**返回值:**
W
wangqinxiao 已提交
7577

W
wanghaoxu 已提交
7578 7579 7580
  | 类型                         | 说明                                          |
  | ---------------------------- | --------------------------------------------- |
  | Promise&lt;RequestResult&gt; | 返回一个期约,兑现值是sendRequestResult实例。 |
7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591

**示例:**

  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  let option = new rpc.MessageOption();
W
wanghaoxu 已提交
7592 7593
  let data = rpc.MessageSequence.create();
  let reply = rpc.MessageSequence.create();
7594 7595
  data.writeInt(1);
  data.writeString("hello");
W
wanghaoxu 已提交
7596
  testRemoteObject.sendMessageRequest(1, data, reply, option)
7597 7598
      .then(function(result) {
          if (result.errCode === 0) {
W
wanghaoxu 已提交
7599
              console.log("sendMessageRequest got result");
7600 7601 7602 7603
              result.reply.readException();
              let msg = result.reply.readString();
              console.log("RPCTest: reply msg: " + msg);
          } else {
W
wanghaoxu 已提交
7604
              console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
7605 7606
          }
      }).catch(function(e) {
W
wanghaoxu 已提交
7607
          console.log("RPCTest: sendMessageRequest got exception: " + e.message);
7608
      }).finally (() => {
W
wanghaoxu 已提交
7609
          console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
7610 7611 7612 7613
          data.reclaim();
          reply.reclaim();
      });
  ```
Z
zengyawen 已提交
7614 7615


W
wanghaoxu 已提交
7616
### sendMessageRequest<sup>9+</sup>
Z
zengyawen 已提交
7617

W
wanghaoxu 已提交
7618 7619 7620
sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback&lt;RequestResult&gt;): void

以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendMessageRequest返回时收到回调,回复内容在reply报文里。
Z
zengyawen 已提交
7621

Y
yangguangzhao 已提交
7622 7623
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7624
**参数:**
W
wanghaoxu 已提交
7625 7626 7627 7628

  | 参数名        | 类型                               | 必填 | 说明                                                                                   |
  | ------------- | ---------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code          | number                             | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7629 7630
  | data          | [MessageSequence](#messagesequence9) | 是   | 保存待发送数据的&nbsp;MessageSequence对象。                                            |
  | reply         | [MessageSequence](#messagesequence9) | 是   | 接收应答数据的MessageSequence对象。                                                    |
W
wanghaoxu 已提交
7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660
  | options       | [MessageOption](#messageoption)    | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
  | AsyncCallback | AsyncCallback&lt;RequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |

**示例:**

  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
  }
  function sendRequestCallback(result) {
      if (result.errCode === 0) {
          console.log("sendRequest got result");
          result.reply.readException();
          let msg = result.reply.readString();
          console.log("RPCTest: reply msg: " + msg);
      } else {
          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
      }
      console.log("RPCTest: sendRequest ends, reclaim parcel");
      result.data.reclaim();
      result.reply.reclaim();
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  let option = new rpc.MessageOption();
  let data = rpc.MessageSequence.create();
  let reply = rpc.MessageSequence.create();
  data.writeInt(1);
  data.writeString("hello");
C
crazy_hu 已提交
7661
  testRemoteObject.sendMessageRequest(1, data, reply, option, sendRequestCallback);
W
wanghaoxu 已提交
7662
  ```
W
wangqinxiao 已提交
7663

Z
zengyawen 已提交
7664

W
wanghaoxu 已提交
7665 7666
### sendRequest<sup>8+(deprecated)</sup>

7667 7668
>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。

W
wanghaoxu 已提交
7669 7670
sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback&lt;SendRequestResult&gt;): void

7671
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
W
wanghaoxu 已提交
7672 7673 7674

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7675
**参数:**
W
wanghaoxu 已提交
7676 7677 7678 7679

  | 参数名        | 类型                                   | 必填 | 说明                                                                                   |
  | ------------- | -------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
  | code          | number                                 | 是   | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
7680 7681
  | data          | [MessageParcel](#messageparceldeprecated)        | 是   | 保存待发送数据的&nbsp;MessageParcel对象。                                              |
  | reply         | [MessageParcel](#messageparceldeprecated)        | 是   | 接收应答数据的MessageParcel对象。                                                      |
W
wanghaoxu 已提交
7682 7683
  | options       | [MessageOption](#messageoption)        | 是   | 本次请求的同异步模式,默认同步调用。                                                   |
  | AsyncCallback | AsyncCallback&lt;SendRequestResult&gt; | 是   | 接收发送结果的回调。                                                                   |
Z
zengyawen 已提交
7684

Y
yangguangzhao 已提交
7685
**示例:**
Y
yangguangzhao 已提交
7686

Z
zengyawen 已提交
7687
  ```
Y
yangguangzhao 已提交
7688 7689
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
7690
          console.log("server died");
Y
yangguangzhao 已提交
7691 7692
      }
  }
Z
zengyawen 已提交
7693 7694 7695 7696
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
Y
yangguangzhao 已提交
7697 7698 7699 7700 7701 7702 7703 7704 7705
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729
  }
  function sendRequestCallback(result) {
      if (result.errCode === 0) {
          console.log("sendRequest got result");
          result.reply.readException();
          let msg = result.reply.readString();
          console.log("RPCTest: reply msg: " + msg);
      } else {
          console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
      }
      console.log("RPCTest: sendRequest ends, reclaim parcel");
      result.data.reclaim();
      result.reply.reclaim();
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  let option = new rpc.MessageOption();
  let data = rpc.MessageParcel.create();
  let reply = rpc.MessageParcel.create();
  data.writeInt(1);
  data.writeString("hello");
  testRemoteObject.sendRequest(1, data, reply, option, sendRequestCallback);
  ```


C
chenyuyan 已提交
7730
### onRemoteRequest<sup>8+(deprecated)</sup>
7731

7732
>从API version 9 开始不再维护,建议使用[onRemoteMessageRequest](#onremotemessagerequest9)类替代。
7733

Z
zengyawen 已提交
7734
onRemoteRequest(code : number, data : MessageParcel, reply: MessageParcel, options : MessageOption): boolean
W
wangqinxiao 已提交
7735

7736
sendMessageRequest请求的响应处理函数,服务端在该函数里处理请求,回复结果。
Z
zengyawen 已提交
7737

Y
yangguangzhao 已提交
7738 7739
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7740
**参数:**
W
wangqinxiao 已提交
7741

W
wanghaoxu 已提交
7742 7743 7744
  | 参数名 | 类型                            | 必填 | 说明                                    |
  | ------ | ------------------------------- | ---- | --------------------------------------- |
  | code   | number                          | 是   | 对端发送的服务请求码。                  |
7745 7746
  | data   | [MessageParcel](#messageparceldeprecated) | 是   | 携带客户端调用参数的MessageParcel对象。 |
  | reply  | [MessageParcel](#messageparceldeprecated) | 是   | 写入结果的MessageParcel对象。           |
W
wanghaoxu 已提交
7747
  | option | [MessageOption](#messageoption) | 是   | 指示操作是同步还是异步。                |
Z
zengyawen 已提交
7748

Y
yangguangzhao 已提交
7749
**返回值:**
W
wangqinxiao 已提交
7750

W
wanghaoxu 已提交
7751 7752
  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
Y
yangguangzhao 已提交
7753
  | boolean | 如果操作成功,则返回true;否则返回false。 |
Z
zengyawen 已提交
7754

Y
yangguangzhao 已提交
7755
**示例:**
Y
yangguangzhao 已提交
7756

7757
  ```ets
Y
yangguangzhao 已提交
7758 7759
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
7760
          console.log("server died");
Y
yangguangzhao 已提交
7761 7762
      }
  }
Z
zengyawen 已提交
7763 7764 7765 7766
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
Y
yangguangzhao 已提交
7767 7768 7769 7770 7771 7772 7773 7774 7775
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786
      onRemoteRequest(code, data, reply, option) {
          if (code === 1) {
              console.log("RpcServer: onRemoteRequest called");
              return true;
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
      }
  }
  ```
W
wanghaoxu 已提交
7787

7788
### onRemoteMessageRequest<sup>9+</sup>
C
chenyuyan 已提交
7789

7790
onRemoteMessageRequest(code : number, data : MessageSequence, reply: MessageSequence, options : MessageOption): boolean | Promise\<boolean>
C
chenyuyan 已提交
7791

7792
> **说明:**
W
wanghaoxu 已提交
7793
>
7794 7795
>* 开发者应优先选择重载onRemoteMessageRequest方法,其中可以自由实现同步和异步的消息处理。
>* 开发者同时重载onRemoteRequest和onRemoteMessageRequest方法时,仅onRemoteMessageRequest方法生效。
7796

W
wanghaoxu 已提交
7797
sendMessageRequest请求的响应处理函数,服务端在该函数里同步或异步地处理请求,回复结果。
C
chenyuyan 已提交
7798 7799 7800

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7801
**参数:**
7802

W
wanghaoxu 已提交
7803 7804 7805
  | 参数名 | 类型                            | 必填 | 说明                                      |
  | ------ | ------------------------------- | ---- | ----------------------------------------- |
  | code   | number                          | 是   | 对端发送的服务请求码。                    |
7806 7807 7808
  | data   | [MessageSequence](#messagesequence9) | 是   | 携带客户端调用参数的MessageSequence对象。 |
  | reply  | [MessageSequence](#messagesequence9) | 是   | 写入结果的MessageSequence对象。           |
  | option | [MessageOption](#messageoption) | 是   | 指示操作是同步还是异步。                  |
C
chenyuyan 已提交
7809 7810

**返回值:**
Z
zengyawen 已提交
7811

W
wanghaoxu 已提交
7812 7813
  | 类型              | 说明                                                                                           |
  | ----------------- | ---------------------------------------------------------------------------------------------- |
7814 7815
  | boolean           | 若在onRemoteMessageRequest中同步地处理请求,则返回一个布尔值:操作成功,则返回true;否则返回false。 |
  | Promise\<boolean> | 若在onRemoteMessageRequest中异步地处理请求,则返回一个Promise对象。                                 |
Z
zengyawen 已提交
7816

7817
**重载onRemoteMessageRequest方法同步处理请求示例:**
Z
zengyawen 已提交
7818

7819
  ```ets
C
chenyuyan 已提交
7820 7821 7822 7823
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
C
crazy_hu 已提交
7824

7825
      onRemoteMessageRequest(code, data, reply, option) {
C
chenyuyan 已提交
7826
          if (code === 1) {
7827
              console.log("RpcServer: sync onRemoteMessageRequest is called");
C
chenyuyan 已提交
7828 7829 7830 7831 7832 7833
              return true;
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
      }
7834 7835
  }
  ```
W
wanghaoxu 已提交
7836

7837
  **重载onRemoteMessageRequest方法异步处理请求示例:**
Z
zengyawen 已提交
7838

7839
  ```ets
7840 7841 7842 7843
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
C
crazy_hu 已提交
7844

7845
      async onRemoteMessageRequest(code, data, reply, option) {
C
chenyuyan 已提交
7846
          if (code === 1) {
7847
              console.log("RpcServer: async onRemoteMessageRequest is called");
C
chenyuyan 已提交
7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
          await new Promise((resolve) => {
            setTimeout(resolve, 100);
          })
          return true;
      }
  }
  ```
W
wanghaoxu 已提交
7859

7860
**同时重载onRemoteMessageRequest和onRemoteRequest方法同步处理请求示例:**
7861

7862
  ```ets
7863 7864 7865 7866
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
C
crazy_hu 已提交
7867

7868 7869
      onRemoteRequest(code, data, reply, option) {
          if (code === 1) {
7870
              console.log("RpcServer: sync onRemoteMessageRequest is called");
7871 7872 7873 7874 7875 7876
              return true;
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
      }
7877 7878
      // 同时调用仅会执行onRemoteMessageRequest
      onRemoteMessageRequest(code, data, reply, option) {
7879
          if (code === 1) {
7880
              console.log("RpcServer: async onRemoteMessageRequest is called");
7881 7882 7883 7884
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
W
wanghaoxu 已提交
7885
         
7886 7887 7888 7889
          return true;
      }
  }
  ```
W
wanghaoxu 已提交
7890

7891
  **同时重载onRemoteMessageRequest和onRemoteRequest方法异步处理请求示例:**
Z
zengyawen 已提交
7892

7893
  ```ets
7894 7895 7896 7897
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
C
crazy_hu 已提交
7898

7899 7900
      onRemoteRequest(code, data, reply, option) {
          if (code === 1) {
W
wanghaoxu 已提交
7901
              console.log("RpcServer: sync onRemoteRequest is called");
7902 7903 7904 7905 7906 7907
              return true;
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
      }
7908 7909
      // 同时调用仅会执行onRemoteMessageRequest
      async onRemoteMessageRequest(code, data, reply, option) {
7910
          if (code === 1) {
7911
              console.log("RpcServer: async onRemoteMessageRequest is called");
7912 7913 7914 7915
          } else {
              console.log("RpcServer: unknown code: " + code);
              return false;
          }
W
wanghaoxu 已提交
7916
         await new Promise((resolve) => {
7917 7918 7919 7920 7921 7922
            setTimeout(resolve, 100);
          })
          return true;
      }
  }
  ```
W
wanghaoxu 已提交
7923 7924


Z
zengyawen 已提交
7925 7926
### getCallingUid

W
wanghaoxu 已提交
7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978
getCallingUid(): number

获取通信对端的进程Uid。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**
  | 类型   | 说明                    |
  | ------ | ----------------------- |
  | number | 返回通信对端的进程Uid。 |

**示例:**

  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  console.log("RpcServer: getCallingUid: " + testRemoteObject.getCallingUid());
  ```

### getCallingPid

getCallingPid(): number

获取通信对端的进程Pid。

**系统能力**:SystemCapability.Communication.IPC.Core

**返回值:**

  | 类型   | 说明                    |
  | ------ | ----------------------- |
  | number | 返回通信对端的进程Pid。 |

**示例:**

  ```
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  console.log("RpcServer: getCallingPid: " + testRemoteObject.getCallingPid());
  ```

### getLocalInterface<sup>9+</sup>

getLocalInterface(descriptor: string): IRemoteBroker
Z
zengyawen 已提交
7979

W
wanghaoxu 已提交
7980
查询接口。
Z
zengyawen 已提交
7981

Y
yangguangzhao 已提交
7982 7983
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
7984
**参数:**
W
wanghaoxu 已提交
7985 7986 7987 7988 7989

  | 参数名     | 类型   | 必填 | 说明                 |
  | ---------- | ------ | ---- | -------------------- |
  | descriptor | string | 是   | 接口描述符的字符串。 |

Y
yangguangzhao 已提交
7990
**返回值:**
W
wangqinxiao 已提交
7991

W
wanghaoxu 已提交
7992 7993 7994
  | 类型          | 说明                                          |
  | ------------- | --------------------------------------------- |
  | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
Z
zengyawen 已提交
7995 7996


Y
yangguangzhao 已提交
7997
**示例:**
Y
yangguangzhao 已提交
7998

Z
zengyawen 已提交
7999
  ```
Y
yangguangzhao 已提交
8000 8001
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
8002
          console.log("server died");
Y
yangguangzhao 已提交
8003 8004
      }
  }
Z
zengyawen 已提交
8005 8006 8007 8008
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
W
wanghaoxu 已提交
8009 8010
      registerDeathRecipient(recipient: MyDeathRecipient, flags: number);
      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number);
Y
yangguangzhao 已提交
8011 8012 8013
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
8014 8015
  }
  let testRemoteObject = new TestRemoteObject("testObject");
W
wanghaoxu 已提交
8016 8017 8018 8019 8020 8021
  try {
      let broker = testRemoteObject.getLocalInterface("testObject");
  } catch(error) {
      console.info(rpc get local interface fail, errorCode " + error.code);
      console.info(rpc get local interface fail, errorMessage " + error.message);
  }
Z
zengyawen 已提交
8022 8023 8024
  ```


8025
### queryLocalInterface<sup>(deprecated)</sup>
Z
zengyawen 已提交
8026

8027 8028
>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。

W
wanghaoxu 已提交
8029
queryLocalInterface(descriptor: string): IRemoteBroker
Z
zengyawen 已提交
8030

8031
查询并获取当前接口描述符对应的远端对象是否已经存在。
Z
zengyawen 已提交
8032

Y
yangguangzhao 已提交
8033 8034
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8035
**参数:**
W
wangqinxiao 已提交
8036

W
wanghaoxu 已提交
8037 8038 8039
  | 参数名     | 类型   | 必填 | 说明                   |
  | ---------- | ------ | ---- | ---------------------- |
  | descriptor | string | 是   | 需要查询的接口描述符。 |
Z
zengyawen 已提交
8040

W
wanghaoxu 已提交
8041 8042 8043 8044 8045
**返回值:**

  | 类型          | 说明                                                               |
  | ------------- | ------------------------------------------------------------------ |
  | IRemoteBroker | 如果接口描述符对应的远端对象存在,则返回该远端对象,否则返回Null。 |
Z
zengyawen 已提交
8046

Y
yangguangzhao 已提交
8047
**示例:**
Y
yangguangzhao 已提交
8048

Z
zengyawen 已提交
8049
  ```
Y
yangguangzhao 已提交
8050 8051
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
8052
          console.log("server died");
Y
yangguangzhao 已提交
8053 8054
      }
  }
Z
zengyawen 已提交
8055 8056 8057 8058
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
Y
yangguangzhao 已提交
8059 8060 8061 8062 8063 8064 8065 8066 8067
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
8068 8069
  }
  let testRemoteObject = new TestRemoteObject("testObject");
W
wanghaoxu 已提交
8070
  let broker = testRemoteObject.queryLocalInterface("testObject");
Z
zengyawen 已提交
8071 8072 8073
  ```


W
wanghaoxu 已提交
8074
### getDescriptor<sup>9+</sup>
Z
zengyawen 已提交
8075

W
wanghaoxu 已提交
8076
getInterfaceDescriptor(): string
Z
zengyawen 已提交
8077

W
wanghaoxu 已提交
8078
获取对象的接口描述符。接口描述符为字符串。
Z
zengyawen 已提交
8079

Y
yangguangzhao 已提交
8080 8081
**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
8082
**返回值:**
W
wangqinxiao 已提交
8083

W
wanghaoxu 已提交
8084 8085 8086
  | 类型   | 说明             |
  | ------ | ---------------- |
  | string | 返回接口描述符。 |
Z
zengyawen 已提交
8087

W
wanghaoxu 已提交
8088 8089
**错误码:**

C
crazy_hu 已提交
8090
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
8091

W
wanghaoxu 已提交
8092 8093 8094
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900008 | proxy or remote object is invalid |
Z
zengyawen 已提交
8095

Y
yangguangzhao 已提交
8096
**示例:**
Y
yangguangzhao 已提交
8097

Z
zengyawen 已提交
8098
  ```
Y
yangguangzhao 已提交
8099 8100
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
8101
          console.log("server died");
Y
yangguangzhao 已提交
8102 8103
      }
  }
Z
zengyawen 已提交
8104 8105 8106 8107
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
W
wanghaoxu 已提交
8108 8109
      addDeathRecipient(recipient: MyDeathRecipient, flags: number);
      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number);
Y
yangguangzhao 已提交
8110 8111 8112
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
8113 8114
  }
  let testRemoteObject = new TestRemoteObject("testObject");
W
wanghaoxu 已提交
8115 8116 8117 8118 8119 8120 8121
  try {
      let descriptor = testRemoteObject.getDescriptor();
  } catch(error) {
      console.info(rpc get local interface fail, errorCode " + error.code);
      console.info(rpc get local interface fail, errorMessage " + error.message);
  }
  console.log("RpcServer: descriptor is: " + descriptor);
Z
zengyawen 已提交
8122 8123 8124
  ```


8125
### getInterfaceDescriptor<sup>(deprecated)</sup>
Z
zengyawen 已提交
8126

8127 8128
>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。

Z
zengyawen 已提交
8129 8130
getInterfaceDescriptor(): string

8131
查询接口描述符。
Z
zengyawen 已提交
8132

Y
yangguangzhao 已提交
8133 8134
**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
8135
**返回值:**
W
wangqinxiao 已提交
8136

W
wanghaoxu 已提交
8137 8138
  | 类型   | 说明             |
  | ------ | ---------------- |
Y
yangguangzhao 已提交
8139
  | string | 返回接口描述符。 |
Z
zengyawen 已提交
8140

Y
yangguangzhao 已提交
8141
**示例:**
Y
yangguangzhao 已提交
8142

Z
zengyawen 已提交
8143
  ```
Y
yangguangzhao 已提交
8144 8145
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
8146
          console.log("server died");
Y
yangguangzhao 已提交
8147 8148
      }
  }
Z
zengyawen 已提交
8149 8150 8151 8152
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
      }
Y
yangguangzhao 已提交
8153 8154 8155 8156 8157 8158 8159 8160 8161
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
Z
zengyawen 已提交
8162 8163 8164 8165 8166 8167 8168
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  let descriptor = testRemoteObject.getInterfaceDescriptor();
  console.log("RpcServer: descriptor is: " + descriptor);
  ```


W
wanghaoxu 已提交
8169
### modifyLocalInterface<sup>9+</sup>
Z
zengyawen 已提交
8170

W
wanghaoxu 已提交
8171
modifyLocalInterface(localInterface: IRemoteBroker, descriptor: string): void
Z
zengyawen 已提交
8172 8173 8174

此接口用于把接口描述符和IRemoteBroker对象绑定。

Y
yangguangzhao 已提交
8175 8176
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8177
**参数:**
W
wangqinxiao 已提交
8178

W
wanghaoxu 已提交
8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214
  | 参数名         | 类型          | 必填 | 说明                                  |
  | -------------- | ------------- | ---- | ------------------------------------- |
  | localInterface | IRemoteBroker | 是   | 将与描述符绑定的IRemoteBroker对象。   |
  | descriptor     | string        | 是   | 用于与IRemoteBroker对象绑定的描述符。 |


**示例:**

  ```
  class MyDeathRecipient {
      onRemoteDied() {
          console.log("server died");
      }
  }
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
          try {
              this.modifyLocalInterface(this, descriptor);
          } catch(error) {
              console.info(rpc attach local interface fail, errorCode " + error.code);
              console.info(rpc attach local interface fail, errorMessage " + error.message);
          }
      }
      registerDeathRecipient(recipient: MyDeathRecipient, flags: number);
      unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number);
      isObjectDead(): boolean {
          return false;
      }
      asObject(): rpc.IRemoteObject {
          return this;
      }
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  ```

8215
### attachLocalInterface<sup>(deprecated)</sup>
W
wanghaoxu 已提交
8216

8217 8218
>从API version 9 开始不再维护,建议使用[modifyLocalInterface](#modifylocalinterface9)类替代。

W
wanghaoxu 已提交
8219 8220
attachLocalInterface(localInterface: IRemoteBroker, descriptor: string): void

8221
此接口用于把接口描述符和IRemoteBroker对象绑定。
W
wanghaoxu 已提交
8222 8223

**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8224

W
wanghaoxu 已提交
8225
**参数:**
W
wanghaoxu 已提交
8226 8227 8228 8229 8230

  | 参数名         | 类型          | 必填 | 说明                                  |
  | -------------- | ------------- | ---- | ------------------------------------- |
  | localInterface | IRemoteBroker | 是   | 将与描述符绑定的IRemoteBroker对象。   |
  | descriptor     | string        | 是   | 用于与IRemoteBroker对象绑定的描述符。 |
Z
zengyawen 已提交
8231

Y
yangguangzhao 已提交
8232
**示例:**
Y
yangguangzhao 已提交
8233

Z
zengyawen 已提交
8234
  ```
Y
yangguangzhao 已提交
8235 8236
  class MyDeathRecipient {
      onRemoteDied() {
Y
yangguangzhao 已提交
8237
          console.log("server died");
Y
yangguangzhao 已提交
8238 8239
      }
  }
Z
zengyawen 已提交
8240 8241 8242 8243 8244
  class TestRemoteObject extends rpc.RemoteObject {
      constructor(descriptor) {
          super(descriptor);
          this.attachLocalInterface(this, descriptor);
      }
Y
yangguangzhao 已提交
8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256
      addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
          return true;
      }
      isObjectDead(): boolean {
          return false;
      }
      asObject(): rpc.IRemoteObject {
          return this;
      }
Z
zengyawen 已提交
8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267
  }
  let testRemoteObject = new TestRemoteObject("testObject");
  ```


## Ashmem<sup>8+</sup>

提供与匿名共享内存对象相关的方法,包括创建、关闭、映射和取消映射Ashmem、从Ashmem读取数据和写入数据、获取Ashmem大小、设置Ashmem保护。

映射内存保护类型:

Y
yangguangzhao 已提交
8268 8269
**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。

8270
  | 名称       | 值  | 说明               |
W
wanghaoxu 已提交
8271 8272 8273 8274 8275
  | ---------- | --- | ------------------ |
  | PROT_EXEC  | 4   | 映射的内存可执行   |
  | PROT_NONE  | 0   | 映射的内存不可访问 |
  | PROT_READ  | 1   | 映射的内存可读     |
  | PROT_WRITE | 2   | 映射的内存可写     |
Z
zengyawen 已提交
8276 8277


W
wanghaoxu 已提交
8278
### create<sup>9+</sup>
Z
zengyawen 已提交
8279

W
wanghaoxu 已提交
8280
static create(name: string, size: number): Ashmem
Z
zengyawen 已提交
8281 8282 8283

根据指定的名称和大小创建Ashmem对象。

Y
yangguangzhao 已提交
8284 8285
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8286
**参数:**
W
wangqinxiao 已提交
8287

W
wanghaoxu 已提交
8288 8289 8290 8291
  | 参数名 | 类型   | 必填 | 说明                         |
  | ------ | ------ | ---- | ---------------------------- |
  | name   | string | 是   | 名称,用于查询Ashmem信息。   |
  | size   | number | 是   | Ashmem的大小,以字节为单位。 |
Z
zengyawen 已提交
8292

Y
yangguangzhao 已提交
8293
**返回值:**
W
wangqinxiao 已提交
8294

W
wanghaoxu 已提交
8295 8296
  | 类型   | 说明                                           |
  | ------ | ---------------------------------------------- |
Y
yangguangzhao 已提交
8297
  | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
Z
zengyawen 已提交
8298

W
wanghaoxu 已提交
8299 8300 8301 8302

**示例:**

  ```
C
crazy_hu 已提交
8303
  let ashmem;
W
wanghaoxu 已提交
8304
  try {
C
crazy_hu 已提交
8305
      ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
W
wanghaoxu 已提交
8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316
  } catch(error) {
      console.info("Rpc creat ashmem fail, errorCode " + error.code);
      console.info("Rpc creat ashmem  fail, errorMessage " + error.message);
  }
  let size = ashmem.getAshmemSize();
  console.log("RpcTest: get ashemm by create : " + ashmem + " size is : " + size);
  ```


### createAshmem<sup>8+(deprecated)</sup>

8317 8318
>从API version 9 开始不再维护,建议使用[create](#create9)类替代。

W
wanghaoxu 已提交
8319 8320
static createAshmem(name: string, size: number): Ashmem

8321
根据指定的名称和大小创建Ashmem对象。
W
wanghaoxu 已提交
8322 8323 8324

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8325
**参数:**
W
wanghaoxu 已提交
8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336

  | 参数名 | 类型   | 必填 | 说明                         |
  | ------ | ------ | ---- | ---------------------------- |
  | name   | string | 是   | 名称,用于查询Ashmem信息。   |
  | size   | number | 是   | Ashmem的大小,以字节为单位。 |

**返回值:**

  | 类型   | 说明                                           |
  | ------ | ---------------------------------------------- |
  | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
Z
zengyawen 已提交
8337

Y
yangguangzhao 已提交
8338
**示例:**
Y
yangguangzhao 已提交
8339

Z
zengyawen 已提交
8340 8341 8342 8343 8344 8345 8346
  ```
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  let size = ashmem.getAshmemSize();
  console.log("RpcTest: get ashemm by createAshmem : " + ashmem + " size is : " + size);
  ```


W
wanghaoxu 已提交
8347
### create<sup>9+</sup>
Z
zengyawen 已提交
8348

W
wanghaoxu 已提交
8349
static create(ashmem: Ashmem): Ashmem
Z
zengyawen 已提交
8350 8351 8352

通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。

Y
yangguangzhao 已提交
8353 8354
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8355
**参数:**
W
wangqinxiao 已提交
8356

W
wanghaoxu 已提交
8357 8358 8359
  | 参数名 | 类型   | 必填 | 说明                 |
  | ------ | ------ | ---- | -------------------- |
  | ashmem | Ashmem | 是   | 已存在的Ashmem对象。 |
Z
zengyawen 已提交
8360

Y
yangguangzhao 已提交
8361
**返回值:**
W
wangqinxiao 已提交
8362

W
wanghaoxu 已提交
8363 8364
  | 类型   | 说明                   |
  | ------ | ---------------------- |
Y
yangguangzhao 已提交
8365
  | Ashmem | 返回创建的Ashmem对象。 |
Z
zengyawen 已提交
8366

W
wanghaoxu 已提交
8367 8368 8369 8370

**示例:**

  ```
C
crazy_hu 已提交
8371
  let ashmem2;
W
wanghaoxu 已提交
8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385
  try {
      let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
      let ashmem2 = rpc.Ashmem.create(ashmem);
  } catch(error) {
      console.info("Rpc creat ashmem from existing fail, errorCode " + error.code);
      console.info("Rpc creat ashmem from existing  fail, errorMessage " + error.message);
  }
  let size = ashmem2.getAshmemSize();
  console.log("RpcTest: get ashemm by create : " + ashmem2 + " size is : " + size);
  ```


### createAshmemFromExisting<sup>8+(deprecated)</sup>

8386 8387
>从API version 9 开始不再维护,建议使用[create](#create9)类替代。

W
wanghaoxu 已提交
8388 8389
static createAshmemFromExisting(ashmem: Ashmem): Ashmem

8390
通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。
W
wanghaoxu 已提交
8391 8392 8393

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8394
**参数:**
W
wanghaoxu 已提交
8395 8396 8397 8398 8399 8400 8401 8402 8403 8404

  | 参数名 | 类型   | 必填 | 说明                 |
  | ------ | ------ | ---- | -------------------- |
  | ashmem | Ashmem | 是   | 已存在的Ashmem对象。 |

**返回值:**

  | 类型   | 说明                   |
  | ------ | ---------------------- |
  | Ashmem | 返回创建的Ashmem对象。 |
Z
zengyawen 已提交
8405

Y
yangguangzhao 已提交
8406
**示例:**
Y
yangguangzhao 已提交
8407

Z
zengyawen 已提交
8408 8409 8410 8411 8412 8413 8414 8415
  ```
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  let ashmem2 = rpc.Ashmem.createAshmemFromExisting(ashmem);
  let size = ashmem2.getAshmemSize();
  console.log("RpcTest: get ashemm by createAshmemFromExisting : " + ashmem2 + " size is : " + size);
  ```


Y
yangguangzhao 已提交
8416
### closeAshmem<sup>8+</sup>
Z
zengyawen 已提交
8417 8418 8419 8420 8421

closeAshmem(): void

关闭这个Ashmem。

Y
yangguangzhao 已提交
8422
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8423

Y
yangguangzhao 已提交
8424
**示例:**
Y
yangguangzhao 已提交
8425

Z
zengyawen 已提交
8426
  ```
W
wanghaoxu 已提交
8427
  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
Z
zengyawen 已提交
8428 8429 8430 8431
  ashmem.closeAshmem();
  ```


Y
yangguangzhao 已提交
8432
### unmapAshmem<sup>8+</sup>
Z
zengyawen 已提交
8433 8434 8435 8436 8437

unmapAshmem(): void

删除该Ashmem对象的地址映射。

Y
yangguangzhao 已提交
8438
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8439

Y
yangguangzhao 已提交
8440
**示例:**
Y
yangguangzhao 已提交
8441

Z
zengyawen 已提交
8442
  ```
W
wanghaoxu 已提交
8443
  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
Z
zengyawen 已提交
8444 8445 8446 8447
  ashmem.unmapAshmem();
  ```


Y
yangguangzhao 已提交
8448
### getAshmemSize<sup>8+</sup>
Z
zengyawen 已提交
8449 8450 8451 8452 8453

getAshmemSize(): number

获取Ashmem对象的内存大小。

Y
yangguangzhao 已提交
8454
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8455

Y
yangguangzhao 已提交
8456
**返回值:**
W
wangqinxiao 已提交
8457

W
wanghaoxu 已提交
8458 8459
  | 类型   | 说明                       |
  | ------ | -------------------------- |
Y
yangguangzhao 已提交
8460
  | number | 返回Ashmem对象的内存大小。 |
Z
zengyawen 已提交
8461

Y
yangguangzhao 已提交
8462
**示例:**
Y
yangguangzhao 已提交
8463

Z
zengyawen 已提交
8464 8465 8466 8467 8468 8469 8470
  ```
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  let size = ashmem.getAshmemSize();
  console.log("RpcTest: get ashmem is " + ashmem + " size is : " + size);
  ```


W
wanghaoxu 已提交
8471
### mapTypedAshmem<sup>9+</sup>
Z
zengyawen 已提交
8472

W
wanghaoxu 已提交
8473
mapTypedAshmem(mapType: number): void
Z
zengyawen 已提交
8474 8475 8476

在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。

Y
yangguangzhao 已提交
8477
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8478

W
wanghaoxu 已提交
8479
**参数:**
W
wangqinxiao 已提交
8480

W
wanghaoxu 已提交
8481 8482 8483 8484
  | 参数名  | 类型   | 必填 | 说明                           |
  | ------- | ------ | ---- | ------------------------------ |
  | mapType | number | 是   | 指定映射的内存区域的保护等级。 |

W
wanghaoxu 已提交
8485 8486
**错误码:**

C
crazy_hu 已提交
8487
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
8488

W
wanghaoxu 已提交
8489 8490 8491
  | 错误码ID | 错误信息 |
  | ------- | ------ |
  | 1900001     | call mmap function failed |
W
wanghaoxu 已提交
8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507

**示例:**

  ```
  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  try {
      ashmem.mapTypedAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
  } catch(error) {
      console.info("Rpc map ashmem fail, errorCode " + error.code);
      console.info("Rpc map ashmem fail, errorMessage " + error.message);
  }
  ```


### mapAshmem<sup>8+(deprecated)</sup>

8508 8509
>从API version 9 开始不再维护,建议使用[mapTypedAshmem](#maptypedashmem9)类替代。

W
wanghaoxu 已提交
8510 8511
mapAshmem(mapType: number): boolean

8512
在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。
W
wanghaoxu 已提交
8513 8514 8515

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8516
**参数:**
W
wanghaoxu 已提交
8517 8518 8519 8520

  | 参数名  | 类型   | 必填 | 说明                           |
  | ------- | ------ | ---- | ------------------------------ |
  | mapType | number | 是   | 指定映射的内存区域的保护等级。 |
Z
zengyawen 已提交
8521

Y
yangguangzhao 已提交
8522
**返回值:**
W
wangqinxiao 已提交
8523

W
wanghaoxu 已提交
8524 8525
  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
Y
yangguangzhao 已提交
8526
  | boolean | 如果映射成功,则返回true;否则返回false。 |
Z
zengyawen 已提交
8527

Y
yangguangzhao 已提交
8528
**示例:**
Y
yangguangzhao 已提交
8529

Z
zengyawen 已提交
8530 8531
  ```
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
Y
yangguangzhao 已提交
8532
  let mapReadAndWrite = ashmem.mapAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
Z
zengyawen 已提交
8533 8534 8535 8536
  console.log("RpcTest: map ashmem result is  : " + mapReadAndWrite);
  ```


W
wanghaoxu 已提交
8537
### mapReadWriteAshmem<sup>9+</sup>
Z
zengyawen 已提交
8538

W
wanghaoxu 已提交
8539
mapReadAndWriteAshmem(): void
Z
zengyawen 已提交
8540 8541 8542

在此进程虚拟地址空间上创建可读写的共享文件映射。

Y
yangguangzhao 已提交
8543
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8544

W
wanghaoxu 已提交
8545 8546
**错误码:**

C
crazy_hu 已提交
8547
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
8548

W
wanghaoxu 已提交
8549 8550 8551
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900001 | call mmap function failed |
W
wanghaoxu 已提交
8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567

**示例:**

  ```
  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  try {
      ashmem.mapReadWriteAshmem();
  } catch(error) {
      console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
      console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
  }
  ```


### mapReadAndWriteAshmem<sup>8+(deprecated)</sup>

8568 8569
>从API version 9 开始不再维护,建议使用[mapReadWriteAshmem](#mapreadwriteashmem9)类替代。

W
wanghaoxu 已提交
8570 8571
mapReadAndWriteAshmem(): boolean

8572
在此进程虚拟地址空间上创建可读写的共享文件映射。
W
wanghaoxu 已提交
8573 8574 8575

**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
8576
**返回值:**
W
wangqinxiao 已提交
8577

W
wanghaoxu 已提交
8578 8579
  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
Y
yangguangzhao 已提交
8580
  | boolean | 如果映射成功,则返回true;否则返回false。 |
Z
zengyawen 已提交
8581

Y
yangguangzhao 已提交
8582
**示例:**
Y
yangguangzhao 已提交
8583

Z
zengyawen 已提交
8584 8585 8586 8587 8588 8589 8590
  ```
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  let mapResult = ashmem.mapReadAndWriteAshmem();
  console.log("RpcTest: map ashmem result is  : " + mapResult);
  ```


W
wanghaoxu 已提交
8591
### mapReadonlyAshmem<sup>9+</sup>
Z
zengyawen 已提交
8592

W
wanghaoxu 已提交
8593
mapReadonlyAshmem(): void
Z
zengyawen 已提交
8594 8595 8596

在此进程虚拟地址空间上创建只读的共享文件映射。

Y
yangguangzhao 已提交
8597
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8598

W
wanghaoxu 已提交
8599 8600
**错误码:**

C
crazy_hu 已提交
8601
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
8602

W
wanghaoxu 已提交
8603 8604 8605
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900001 | call mmap function failed |
W
wanghaoxu 已提交
8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621

**示例:**

  ```
  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  try {
      ashmem.mapReadonlyAshmem();
  } catch(error) {
      console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
      console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
  }
  ```


### mapReadOnlyAshmem<sup>8+(deprecated)</sup>

8622 8623
>从API version 9 开始不再维护,建议使用[mapReadonlyAshmem](#mapreadonlyashmem9)类替代。

W
wanghaoxu 已提交
8624 8625
mapReadOnlyAshmem(): boolean

8626
在此进程虚拟地址空间上创建只读的共享文件映射。
W
wanghaoxu 已提交
8627 8628 8629

**系统能力**:SystemCapability.Communication.IPC.Core

Y
yangguangzhao 已提交
8630
**返回值:**
W
wangqinxiao 已提交
8631

W
wanghaoxu 已提交
8632 8633
  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
Y
yangguangzhao 已提交
8634
  | boolean | 如果映射成功,则返回true;否则返回false。 |
Z
zengyawen 已提交
8635

Y
yangguangzhao 已提交
8636
**示例:**
Y
yangguangzhao 已提交
8637

Z
zengyawen 已提交
8638 8639 8640 8641 8642 8643 8644
  ```
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  let mapResult = ashmem.mapReadOnlyAshmem();
  console.log("RpcTest: Ashmem mapReadOnlyAshmem result is : " + mapResult);
  ```


W
wanghaoxu 已提交
8645
### setProtectionType<sup>9+</sup>
Z
zengyawen 已提交
8646

W
wanghaoxu 已提交
8647
setProtectionType(protectionType: number): void
Z
zengyawen 已提交
8648 8649 8650

设置映射内存区域的保护等级。

Y
yangguangzhao 已提交
8651
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8652

W
wanghaoxu 已提交
8653
**参数:**
W
wangqinxiao 已提交
8654

W
wanghaoxu 已提交
8655 8656 8657 8658
  | 参数名         | 类型   | 必填 | 说明               |
  | -------------- | ------ | ---- | ------------------ |
  | protectionType | number | 是   | 要设置的保护类型。 |

W
wanghaoxu 已提交
8659 8660
**错误码:**

C
crazy_hu 已提交
8661
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
8662

W
wanghaoxu 已提交
8663 8664 8665
  | 错误码ID | 错误信息 |
  | -------- | ------- |
  | 1900002 | call os ioctl function failed |
W
wanghaoxu 已提交
8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681

**示例:**

  ```
  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  try {
      ashmem.setProtection(ashmem.PROT_READ);
  } catch(error) {
      console.info("Rpc set protection type fail, errorCode " + error.code);
      console.info("Rpc set protection type fail, errorMessage " + error.message);
  }
  ```


### setProtection<sup>8+(deprecated)</sup>

8682 8683
>从API version 9 开始不再维护,建议使用[setProtectionType](#setprotectiontype9)类替代。

W
wanghaoxu 已提交
8684 8685
setProtection(protectionType: number): boolean

8686
设置映射内存区域的保护等级。
W
wanghaoxu 已提交
8687 8688 8689

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8690
**参数:**
W
wanghaoxu 已提交
8691 8692 8693 8694

  | 参数名         | 类型   | 必填 | 说明               |
  | -------------- | ------ | ---- | ------------------ |
  | protectionType | number | 是   | 要设置的保护类型。 |
Z
zengyawen 已提交
8695

Y
yangguangzhao 已提交
8696
**返回值:**
W
wangqinxiao 已提交
8697

W
wanghaoxu 已提交
8698 8699
  | 类型    | 说明                                      |
  | ------- | ----------------------------------------- |
Y
yangguangzhao 已提交
8700
  | boolean | 如果设置成功,则返回true;否则返回false。 |
Z
zengyawen 已提交
8701

Y
yangguangzhao 已提交
8702
**示例:**
Y
yangguangzhao 已提交
8703

Z
zengyawen 已提交
8704 8705
  ```
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
Y
yangguangzhao 已提交
8706
  let result = ashmem.setProtection(ashmem.PROT_READ);
Z
zengyawen 已提交
8707 8708 8709 8710
  console.log("RpcTest: Ashmem setProtection result is : " + result);
  ```


W
wanghaoxu 已提交
8711
### writeAshmem<sup>9+</sup>
Z
zengyawen 已提交
8712

W
wanghaoxu 已提交
8713
writeAshmem(buf: number[], size: number, offset: number): void
Z
zengyawen 已提交
8714 8715 8716

将数据写入此Ashmem对象关联的共享文件。

Y
yangguangzhao 已提交
8717
**系统能力**:SystemCapability.Communication.IPC.Core
Z
zengyawen 已提交
8718

W
wanghaoxu 已提交
8719
**参数:**
W
wangqinxiao 已提交
8720

W
wanghaoxu 已提交
8721 8722 8723 8724 8725 8726
  | 参数名 | 类型     | 必填 | 说明                                               |
  | ------ | -------- | ---- | -------------------------------------------------- |
  | buf    | number[] | 是   | 写入Ashmem对象的数据。                             |
  | size   | number   | 是   | 要写入的数据大小。                                 |
  | offset | number   | 是   | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |

W
wanghaoxu 已提交
8727 8728
**错误码:**

C
crazy_hu 已提交
8729
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
8730

W
wanghaoxu 已提交
8731 8732 8733
  | 错误码ID | 错误信息 |
  | ------- | -------- |
  | 1900003 | write to ashmem failed |
W
wanghaoxu 已提交
8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751

**示例:**

  ```
  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  ashmem.mapReadWriteAshmem();
  var ByteArrayVar = [1, 2, 3, 4, 5];
  try {
      ashmem.writeAshmem(ByteArrayVar, 5, 0);
  } catch(error) {
      console.info("Rpc write to ashmem fail, errorCode " + error.code);
      console.info("Rpc write to ashmem fail, errorMessage " + error.message);
  }
  ```


### writeToAshmem<sup>8+(deprecated)</sup>

8752 8753
>从API version 9 开始不再维护,建议使用[writeAshmem](#writeashmem9)类替代。

W
wanghaoxu 已提交
8754 8755
writeToAshmem(buf: number[], size: number, offset: number): boolean

8756
将数据写入此Ashmem对象关联的共享文件。
W
wanghaoxu 已提交
8757 8758 8759

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8760
**参数:**
W
wanghaoxu 已提交
8761 8762 8763 8764 8765 8766

  | 参数名 | 类型     | 必填 | 说明                                               |
  | ------ | -------- | ---- | -------------------------------------------------- |
  | buf    | number[] | 是   | 写入Ashmem对象的数据。                             |
  | size   | number   | 是   | 要写入的数据大小。                                 |
  | offset | number   | 是   | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |
Z
zengyawen 已提交
8767

Y
yangguangzhao 已提交
8768
**返回值:**
W
wangqinxiao 已提交
8769

W
wanghaoxu 已提交
8770 8771
  | 类型    | 说明                                                                                      |
  | ------- | ----------------------------------------------------------------------------------------- |
Y
yangguangzhao 已提交
8772
  | boolean | 如果数据写入成功,则返回true;在其他情况下,如数据写入越界或未获得写入权限,则返回false。 |
Z
zengyawen 已提交
8773

Y
yangguangzhao 已提交
8774
**示例:**
Y
yangguangzhao 已提交
8775

Z
zengyawen 已提交
8776 8777
  ```
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
Y
yangguangzhao 已提交
8778 8779
  let mapResult = ashmem.mapReadAndWriteAshmem();
  console.info("RpcTest map ashmem result is " + mapResult);
Y
yangguangzhao 已提交
8780
  var ByteArrayVar = [1, 2, 3, 4, 5];
Z
zengyawen 已提交
8781 8782 8783 8784 8785
  let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
  console.log("RpcTest: write to Ashmem result is  : " + writeResult);
  ```


W
wanghaoxu 已提交
8786
### readAshmem<sup>9+</sup>
Z
zengyawen 已提交
8787

W
wanghaoxu 已提交
8788
readAshmem(size: number, offset: number): number[]
Z
zengyawen 已提交
8789 8790 8791

从此Ashmem对象关联的共享文件中读取数据。

Y
yangguangzhao 已提交
8792 8793
**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8794
**参数:**
W
wangqinxiao 已提交
8795

W
wanghaoxu 已提交
8796 8797 8798 8799
  | 参数名 | 类型   | 必填 | 说明                                               |
  | ------ | ------ | ---- | -------------------------------------------------- |
  | size   | number | 是   | 要读取的数据的大小。                               |
  | offset | number | 是   | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |
Z
zengyawen 已提交
8800

Y
yangguangzhao 已提交
8801
**返回值:**
W
wangqinxiao 已提交
8802

W
wanghaoxu 已提交
8803 8804
  | 类型     | 说明             |
  | -------- | ---------------- |
Y
yangguangzhao 已提交
8805
  | number[] | 返回读取的数据。 |
Z
zengyawen 已提交
8806

W
wanghaoxu 已提交
8807 8808
**错误码:**

C
crazy_hu 已提交
8809
以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md)
W
wanghaoxu 已提交
8810

W
wanghaoxu 已提交
8811 8812 8813
  | 错误码ID  | 错误信息 |
  | -------- | -------- |
  | 1900004 | read from ashmem failed |
Z
zengyawen 已提交
8814

Y
yangguangzhao 已提交
8815
**示例:**
Y
yangguangzhao 已提交
8816

Z
zengyawen 已提交
8817
  ```
W
wanghaoxu 已提交
8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833
  let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  ashmem.mapReadWriteAshmem();
  var ByteArrayVar = [1, 2, 3, 4, 5];
  ashmem.writeAshmem(ByteArrayVar, 5, 0);
  try {
      let readResult = ashmem.readAshmem(5, 0);
      console.log("RpcTest: read from Ashmem result is  : " + readResult);
  } catch(error) {
      console.info("Rpc read from ashmem fail, errorCode " + error.code);
      console.info("Rpc read from ashmem fail, errorMessage " + error.message);
  }
  ```


### readFromAshmem<sup>8+(deprecated)</sup>

8834 8835
>从API version 9 开始不再维护,建议使用[readAshmem](#readashmem9)类替代。

W
wanghaoxu 已提交
8836 8837
readFromAshmem(size: number, offset: number): number[]

8838
从此Ashmem对象关联的共享文件中读取数据。
W
wanghaoxu 已提交
8839 8840 8841

**系统能力**:SystemCapability.Communication.IPC.Core

W
wanghaoxu 已提交
8842
**参数:**
W
wanghaoxu 已提交
8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857

  | 参数名 | 类型   | 必填 | 说明                                               |
  | ------ | ------ | ---- | -------------------------------------------------- |
  | size   | number | 是   | 要读取的数据的大小。                               |
  | offset | number | 是   | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |

**返回值:**

  | 类型     | 说明             |
  | -------- | ---------------- |
  | number[] | 返回读取的数据。 |

**示例:**

 ```
Z
zengyawen 已提交
8858
  let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
Y
yangguangzhao 已提交
8859 8860
  let mapResult = ashmem.mapReadAndWriteAshmem();
  console.info("RpcTest map ashmem result is " + mapResult);
Y
yangguangzhao 已提交
8861
  var ByteArrayVar = [1, 2, 3, 4, 5];
Z
zengyawen 已提交
8862 8863 8864 8865
  let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
  console.log("RpcTest: write to Ashmem result is  : " + writeResult);
  let readResult = ashmem.readFromAshmem(5, 0);
  console.log("RpcTest: read to Ashmem result is  : " + readResult);
W
wanghaoxu 已提交
8866
  ```