首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Dart客户端web套接字响应从Blob转换为Uint8List?

如何将Dart客户端web套接字响应从Blob转换为Uint8List?
EN

Stack Overflow用户
提问于 2015-02-28 03:18:20
回答 1查看 1.5K关注 0票数 3

我已经为简单的请求/响应对象从Dart客户机到Java服务器实现了我自己的二进制消息协议。它们以Uint8List的形式在Dart中编码,在Java的远程服务器上作为ByteBuffer进行编码。因为Dart客户端命令应用程序中的WebSocket流处理程序被传递为Uint8List类型的数据,所以往返行程适用于dart:io中的Uint8List。

在dart:HTML中,从MessageEvent.data流接收到的websocket.onMessage响应数据被输入为Blob。我没有找到将Blob转换为Uint8List的方法。由于响应通常是一个大的二进制数字数组(double),它将向虚拟滚动上下文提供数据,因此我希望将复制最小化。谁能帮我指出正确的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-28 04:56:54

根据这个文章,您需要使用一个FileReader来完成这个任务。

这个例子似乎很有效,当我在Chrome中测试它时,结果类型是Uint8List。

代码语言:javascript
复制
  var blob = new Blob(['abc']);  
  var r = new FileReader();
  r.readAsArrayBuffer(blob);
  r.onLoadEnd.listen((e) {
    var data = r.result;
    print(data.runtimeType);
  });

另一个选项是将WebSocket.binaryType设置为"arraybuffer“。然后MessageEvent.data将返回一个可以转换为Uint8List的ByteBuffer。参见下面的示例。

代码语言:javascript
复制
import 'dart:html';
import 'dart:typed_data';

void main() {      

  var ws = new WebSocket('...')..binaryType = 'arraybuffer';

  ws.onMessage.listen((MessageEvent e) {
    ByteBuffer buf = e.data;
    var data = buf.asUint8List();
    // ...
  });
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28777712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档