为Dart二进制websocket读取/写入固定大小的int和字符串ByteBuffer

时间:2014-03-05 14:52:09

标签: javascript binary websocket dart

我想编写一个读取和写入自定义二进制消息的dart websocket客户端(通过dart2js和dart:html)。我想当binaryType设置为'arraybuffer'时,传入的MessageEvent.data是来自typed_data dart包的ByteBuffer。知道了传入的字节结构,我想要读取两个字节作为uint16。相反,我需要将uint16添加到传出缓冲区。在这种情况下,具体的机制是什么?如何在相同的输入/输出缓冲区中读取/写入字符串?

最近似乎没有太多关于dart二进制websockets的例子,我想像this guy做的那样用DataStream for javascript,dart,如果有必要的话。

1 个答案:

答案 0 :(得分:2)

您已找到正确的库(typed_data)。现在只需使用它的类(尤其是ByteData)将数据放入缓冲区或从缓冲区读取数据。

E.g。从收到的缓冲区读取两个uint16:

if ((event.data as ByteBuffer).lengthInBytes < 4) { // ignore packet }
ByteData bd = ByteData.view(event.data, 0, (event.data as ByteBuffer).lengthInBytes);
int first = bd.getUint16(0);
int second = bd.getUint16(2);

并发送两个uint16:

Uint8List newBuffer = new Uint8List(4);
ByteData newBufferView = new ByteData.view(newBuffer.buffer, 0);
newBufferView.setUint16(0, 24);
newBufferView.setUint16(0, 4321);
socket.sendTypedData(newBuffer);

对于读写字符串,请查看dart:convert类似Utf8Codec的编解码器,它们可以从/向字节列表读取和写入字符串。