websocket默认支持二进制数据,需设置binarytype为"arraybuffer"以使message事件中的event.data为arraybuffer,再用uint8array或dataview解析;发送时须传arraybuffer或视图的buffer属性,且确保连接已打开并处理异常。

WebSocket 默认支持二进制数据,只需设置 binaryType 属性并监听 message 事件即可接收 ArrayBuffer(或其他二进制类型)。
设置 binaryType 为 "arraybuffer"
创建 WebSocket 实例后,立即设置 binaryType 为 "arraybuffer",这样接收到的二进制消息就会自动转为 ArrayBuffer 对象:
- 必须在连接建立前或连接后、首次接收前设置,否则可能影响已缓存的消息
- 如果不设,默认是
"blob";设为"arraybuffer"后,event.data就是ArrayBuffer - 示例:
ws.binaryType = "arraybuffer";
接收 ArrayBuffer 并解析数据
在 message 事件回调中,检查 event.data 类型,用 Uint8Array、DataView 或 JSON.parse(如果是字符串化后的二进制结构)进一步处理:
-
const uint8 = new Uint8Array(event.data);—— 快速按字节访问 -
const view = new DataView(event.data);—— 读取特定偏移处的 int32、float64 等 - 若服务端发送的是序列化对象(如 Protocol Buffer 或自定义二进制协议),需按约定解析字段
发送 ArrayBuffer 数据
直接调用 ws.send() 传入 ArrayBuffer 或基于它的视图(如 Uint8Array、Int16Array)即可:
ws.send(new Uint8Array([0x01, 0x02, 0x03]).buffer);-
ws.send(arrayBuffer);—— 注意:传入的是buffer属性,不是视图本身 - 不支持直接 send 视图对象(如
Uint8Array),必须传底层ArrayBuffer
注意兼容性与错误处理
binaryType 在所有现代浏览器中都支持,但需留意连接状态和类型匹配:
- 确保
ws.readyState === WebSocket.OPEN再发送,避免报错 - 监听
error事件,捕获发送/接收过程中的异常(如类型不匹配、内存溢出) - 大 ArrayBuffer 可能触发内存压力,必要时用
slice()分块处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











