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

标签 javascript binary websocket dart

我想编写一个 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/

相关文章:

angularjs - 使用 AngularJS 从 Node.JS 服务器下载文件

ios - 二进制字符串到人类可读字符串

node.js - 你如何处理一个基本的 Websocket 框架

cocoa - 在浏览器之外使用 Websockets 有什么好的理由吗?

javascript - 右键单击网站上的链接时缺少“在新选项卡中打开链接”选项

javascript - 如何在 Ctrl+F 上展开 html 表格的所有行

vb.net - 将二进制解释为 2 位对

c++ - 使用 C++ 服务器制作 Websocket

javascript - 在页面更改时保留连接对象

javascript - aws-serverless-express 连接到 mongo 并获取 mongo 文档