我想编写一个 dart websocket 客户端(通过 dart2js 和 dart:html)来读取和写入自定义二进制消息。我想当 binaryType 设置为 'arraybuffer' 时,传入的 MessageEvent.data 是来自 typed_data dart 包的 ByteBuffer。知道传入的字节结构后,我想读出两个字节作为 uint16。相反,我需要向传出缓冲区添加一个 uint16。这种情况下的具体机制是什么?我如何在同一个输入/输出缓冲区中读取/写入字符串?
dart 二进制 websockets 最近的例子似乎不多,我想做类似 this guy 的事情。如有必要,为 javascript 和 dart 使用 DataStream。
最佳答案
您已经找到了正确的库 (typed_data
)。现在只需使用它的类(尤其是 ByteData
)将数据放入缓冲区或从缓冲区读取数据。
例如从接收缓冲区中读取两个 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
,它可以从字节列表读取字符串或向字节列表写入字符串。
关于javascript - 为 Dart 二进制 websocket 从 ByteBuffer 读取/写入固定大小的 int 和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22201183/