javascript - 如何将二进制数据从binaryjs转换为字符串/文本

标签 javascript node.js stream converters

我的 BinaryJS Web 客户端收到二进制数据,如何将其转换回服务器发送的文本输入?

创建 Websocket 的服务器(使用 NodeJS)使用 BinaryJS,因为它获取要作为流传输的数据,并且我想使用 Websocket 流将该数据转发到客户端。

网络客户端如下所示:

  <html>
  <head>
    <script src="http://cdn.binaryjs.com/0/binary.js"></script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"></script>
    <script src="text-encoding/lib/encoding.js"></script>
    <script src="decode.js"></script>
    <script>
      // Connect to Binary.js server
      var client = new BinaryClient('ws://localhost:9000');
      // Received new stream from server!
      client.on('stream', function(stream, meta){
        // Buffer for parts
        // Got new data
        stream.on('data', function(data){
          $( ".inner" ).append(data+"<br />");
        });
        stream.on('end', function(){
        });
      });
    </script>
  </head>
  <body>
    <div class="inner">Output:</div>
  </body>
  </html>

遗憾的是,我的输出不是输入文本,而只是这样的内容:

[object ArrayBuffer]

编辑: 找到了可能的解决方案:

由于数据是 UTF-8 编码的,我可以使用某人在另一个问题中发布的函数简单地对其进行解码:

function ab2str(buf) {
  return String.fromCharCode.apply(null, new Uint8Array(buf));
}

最佳答案

这里有两种情况:

我假设您指的是这个问题:Uint8Array to string in Javascript

请注意,fromCharCode 答案明确表示它无法正确解码 UTF8。最好的选择是使用 FileReader 解码 ArrayBuffer。您还在 data 处理程序中错误地处理了此内容,而不是您应该首先聚合它。

client.on('stream', function(stream, meta){
    var parts = [];
    stream.on('data', function(data){
        parts.push(data);
    });
    stream.on('end', function(){
        var blob = new Blob(parts);
        var reader = new FileReader();
        reader.onload = function(){
            $( ".inner" ).append(reader.result + "<br />");
        };
        reader.readAsText(blob);
    });
});

话虽如此,我的实际建议是在这种情况下不要使用 Binary.js。它的重点是传输二进制数据。如果您计划主要传输文本,则应该考虑使用更多面向文本的库,例如 Socket.IO。

关于javascript - 如何将二进制数据从binaryjs转换为字符串/文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26595985/

相关文章:

javascript - typeof 返回对象但出现错误 : "undefined is not an object"

javascript - 将 JQuery 单击事件直接发送到同一元素的两个?

javascript 轮播不滑动

javascript - 为 JavaScript 数组树创建 forEach 语句

mysql - 如果我想在nodejs中使用mysql数据库,waterline是中间件吗?

javascript - Karma 公共(public) api 缺少 configFile 选项

c# - 如何在 .Net Core 中读取/写入文件?

c# stream wcf上传文件

node.js - 刷新页面时未找到请求的 URL

ios - Swift 4 OutputStream 产生的输出多于输入