我想编写一个读取和写入自定义二进制消息的dart websocket客户端(通过dart2js和dart:html)。我想当binaryType设置为'arraybuffer'时,传入的MessageEvent.data是来自typed_data dart包的ByteBuffer。知道了传入的字节结构,我想要读取两个字节作为uint16。相反,我需要将uint16添加到传出缓冲区。在这种情况下,具体的机制是什么?如何在相同的输入/输出缓冲区中读取/写入字符串?
最近似乎没有太多关于dart二进制websockets的例子,我想像this guy做的那样用DataStream for javascript,dart,如果有必要的话。
答案 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
的编解码器,它们可以从/向字节列表读取和写入字符串。