我已经为简单的请求/响应对象从Dart客户机到Java服务器实现了我自己的二进制消息协议。它们以Uint8List的形式在Dart中编码,在Java的远程服务器上作为ByteBuffer进行编码。因为Dart客户端命令应用程序中的WebSocket流处理程序被传递为Uint8List类型的数据,所以往返行程适用于dart:io中的Uint8List。
在dart:HTML中,从MessageEvent.data流接收到的websocket.onMessage响应数据被输入为Blob。我没有找到将Blob转换为Uint8List的方法。由于响应通常是一个大的二进制数字数组(double),它将向虚拟滚动上下文提供数据,因此我希望将复制最小化。谁能帮我指出正确的方向吗?
发布于 2015-02-28 04:56:54
根据这个文章,您需要使用一个FileReader来完成这个任务。
这个例子似乎很有效,当我在Chrome中测试它时,结果类型是Uint8List。
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。参见下面的示例。
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();
// ...
});
}https://stackoverflow.com/questions/28777712
复制相似问题