我正在尝试用 HTML5、WebSocket 和 File API 做一些实验。我正在使用 Tomcat7 WebSocket 实现。我能够从 servlet 发送和接收文本消息。我现在要做的是从 servlet 发送到客户端 JSON 对象,但我想避免文本消息以跳过客户端上的 JSON.parse (或类似的),所以我试图发送二进制消息. servlet 部分非常简单:
String s = "{arr : [1,2]}";
CharBuffer cbuf = CharBuffer.wrap(s);
CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
getWsOutbound().writeBinaryMessage(encoder.encode(cbuf));
getWsOutbound().flush();
在这条消息之后,在客户端我看到我收到了一个二进制帧,它被转换为一个 Blob 对象(http://www.w3.org/TR/FileAPI/#dfn-Blob)。问题是:是否可以从 Blob 中获取 JSON 对象?我查看了 FileReader 接口(http://www.w3.org/TR/FileAPI/#FileReader-interface),我使用这样的代码来检查 FileReader 可以做什么(第一行创建了一个全新的Blob,因此您可以根据需要即时测试):
var b = new Blob([{"test": "toast"}], {type : "application/json"});
var fr = new FileReader();
fr.onload = function(evt) {
var res = evt.target.result;
console.log("onload",arguments, res, typeof res);
};
fr.readAsArrayBuffer(b);
使用我在文件阅读器实现中看到的所有“readAs...”方法(我使用的是 Chrome 22)。反正我没有找到有用的东西。
你有什么建议吗?谢谢。