diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets index 33ad31db904f7f1a00c5c3984a12785effc31689..d9df49cee8388c6adebc1dfffbf8ce1c0bd85d50 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets @@ -217,13 +217,13 @@ export default class StandardMessageCodec implements MessageCodec { writeSize(stream: ByteBuffer, value: number) { if (value < 254) { - stream.writeInt8(value); + stream.writeUint8(value); } else if (value <= 0xffff) { - stream.writeInt8(254); - stream.writeInt16(value, true); + stream.writeUint8(254); + stream.writeUint16(value, true); } else { - stream.writeInt8(255); - stream.writeInt32(value, true); + stream.writeUint8(255); + stream.writeUint32(value, true); } } @@ -233,13 +233,13 @@ export default class StandardMessageCodec implements MessageCodec { } readSize(buffer: ByteBuffer) { - let value = buffer.readInt8() & 0xff; + let value = buffer.readUint8() & 0xff; if (value < 254) { return value; } else if (value == 254) { return buffer.readUint16(true); } else { - return buffer.readInt32(true); + return buffer.readUint32(true); } } @@ -257,10 +257,9 @@ export default class StandardMessageCodec implements MessageCodec { readBytes(buffer: ByteBuffer): Uint8Array { let length = this.readSize(buffer); - let bytes = new Uint8Array(length) - for (let i = 0; i < length; i++) { - bytes[i] = buffer.readUint8() - } + let bytesBuffer = new ArrayBuffer(length); + let bytes = new Uint8Array(bytesBuffer); + bytes.set(buffer.readUint8Array(length)); return bytes; } diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/util/ByteBuffer.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/util/ByteBuffer.ets index 57193e339a90805271c4bb24f091ee4d379331f9..e7cc1d3ac24f31d8f32bd64190819fee1ae57817 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/util/ByteBuffer.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/util/ByteBuffer.ets @@ -116,7 +116,11 @@ export class ByteBuffer { */ checkWriteCapacity(slen: number): void { if (this.mByteOffset + slen > this.dataView!.byteLength) { - let newBuffer = new ArrayBuffer(this.dataView!.byteLength + slen + 512); + let newCapacity = this.dataView!.byteLength + (this.dataView!.byteLength >> 1); + if (newCapacity < this.dataView!.byteLength + slen + 512) { + newCapacity = this.dataView!.byteLength + slen + 512; + } + let newBuffer = new ArrayBuffer(newCapacity); let newDataView = new DataView(newBuffer); let oldUint8Array = new Uint8Array(this.dataView!.buffer); let newUint8Array = new Uint8Array(newBuffer); diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/util/StringUtils.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/util/StringUtils.ets index a9344782075002c1968da4b8b23c982b9553b944..62c730aa6b35d907934f4035b38802681224a6fd 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/util/StringUtils.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/util/StringUtils.ets @@ -19,28 +19,28 @@ import util from '@ohos.util' * 默认字符串工具 */ export default class StringUtils { + static TEXT_ENCODER = new util.TextEncoder("utf-8"); + static TEXT_DECODER = util.TextDecoder.create('utf-8', { ignoreBOM : true }); + static stringToArrayBuffer(str: string): ArrayBuffer { if(str.length == 0){ return new ArrayBuffer(0); } - let textEncoder = new util.TextEncoder("utf-8"); - return textEncoder.encodeInto(str).buffer; + return StringUtils.TEXT_ENCODER.encodeInto(str).buffer; } static arrayBufferToString(buffer: ArrayBuffer): string { if (buffer.byteLength <= 0) { return ""; } - let textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM : true }) - return textDecoder.decode(new Uint8Array(buffer)); + return StringUtils.TEXT_DECODER.decodeWithStream(new Uint8Array(buffer)); } static uint8ArrayToString(buffer: Uint8Array): string { if (buffer.length <= 0) { return ""; } - let textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM : true }) - return textDecoder.decodeWithStream(buffer); + return StringUtils.TEXT_DECODER.decodeWithStream(buffer); } static isNotEmpty(str: string): boolean {