我正在尝试使用HTML5、WebSocket和File API进行一些实验。 我正在使用Tomcat7 WebSocket实现。 我能够从servlet发送和接收文本消息。现在我想做的是从servlet向客户端发送JSON对象,但我想避免文本消息,以跳过客户端上的JSON解析(或类似操作),所以我正在尝试发送二进制消息。 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)。无论如何,我没有找到有用的东西。
你有什么建议吗?谢谢。