HarmonyOS 鸿蒙Next接口请求返回二进制数据流自动截断,安卓和IOS没有问题

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next接口请求返回二进制数据流自动截断,安卓和IOS没有问题

https://help.aliyun.com/zh/isi/developer-reference/restful-api-3?spm=a2c4g.11186623.0.0.3e464988nGa5pR  接口请求文字转语音接口 安卓返回的来的二进制数据流是完整的,鸿蒙接口请求返回来的字段自动截断 “result”:“RIFF$6\u0010”  


更多关于HarmonyOS 鸿蒙Next接口请求返回二进制数据流自动截断,安卓和IOS没有问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

使用console.log打印出现截断:

hilog支持的单次打印的最大字符数为4096个字符,超出部分将会被截断,

可以考虑分多次或多段打印日志

或在IDE控制台查看日志,调整输出设置,File->setting->Editor->general->Console下,有个override console cycle buffer size选项,在里面调大容量试试

尝试将'Content-Type': 'audio/mpeg'改为'Content-Type': 'application/json'进行测试

二进制数据流指定返回类型应该要用ArrayBuffer接收,

// 可选,指定返回数据的类型

expectDataType: http.HttpDataType.STRING,

把expectDataType的值改成ArrayBuffer试下

ArrayBuffer是不可见数据类型,可以使用以下代码看下长度:

let ab = data.result as ArrayBuffer

console.log('ab.byteLength:' + ab.byteLength);

图片数据转图片,音频数据转音频,不同的用途解析方法不一样

二进制数据流就是使用ArrayBuffer接收返回数据,请根据具体使用场景,具体解析

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkts-kit-V5#section0489181641410

关于ArrayBuffer的介绍:什么是ArrayBuffer 类型化数组,是JavaScript操作二进制数据的一个接口。最初为了满足JS和显卡之间大量的实时的数据交换,而两只之间的数据通信必须是二进制的。这种背景下诞生了ArrayBuffer分配内存:类型化数组是建立在ArrayBuffer对象基础上的,分配一段可以存放数据的连续的内存区域let bf = new ArrayBuffer(40) // 生成一个字节长度为40的内存空间 console.log(bf.byteLength); // 40 /* 值得注意的是如果要分配的内存区域很大。

音频编码参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/audio-encoding-V5

建议使用FFmpeg音频转换工具

如果返回的是一个可读流或者双工流,可以使用

let dataChunk = readableStream.read();// 从可读流缓冲区读取数据,并返回读取到的数据

然后使用fs.createStreamSync创建文件流,再将数据写入

let path =getContext().filesDir + '/text.txt'

let streamWrite = fs.createStreamSync(path , ‘w’);

streamWrite.writeSyc( dataChunk );

streamWrite.flushSync();//刷新文件流

streamWrite.closeSync();

这几个api的详细使用可以参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-stream-V5#read

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5#stream

更多关于HarmonyOS 鸿蒙Next接口请求返回二进制数据流自动截断,安卓和IOS没有问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next接口在请求返回二进制数据流时自动截断的问题,可能是由于鸿蒙系统在处理大数据流时的底层机制与安卓和iOS存在差异。这种情况可能涉及以下几个方面的排查:

  1. 数据包大小限制:检查鸿蒙系统是否对单次请求的数据包大小有上限设置,导致超出部分被截断。

  2. 内存管理:鸿蒙系统的内存管理机制可能与安卓和iOS不同,确保请求过程中有足够的内存空间来存储完整的二进制数据流。

  3. 编码与解码:确认发送端和鸿蒙接收端的编码方式是否一致,以及鸿蒙系统对二进制数据的解码处理是否存在特殊性。

  4. 网络协议:检查网络协议层是否存在对数据包大小的限制或分割处理,导致数据在传输过程中被截断。

  5. 系统日志:查看鸿蒙系统的日志文件,分析是否有关于数据截断的错误信息或警告。

若上述排查均未能解决问题,可能涉及更深入的鸿蒙系统内部机制分析。由于这需要对鸿蒙系统有深入了解,建议直接联系鸿蒙系统的技术支持团队。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部