【问题标题】:Returning binary data from NodeJS从 NodeJS 返回二进制数据
【发布时间】:2011-09-14 22:44:16
【问题描述】:

我有一个名为 ReadBinaryData() 的函数,我想创建一个读取流来读取二进制数据并通过回调将二进制数据返回给调用函数。看来你可以用 Node 用几种不同的方式做到这一点,我已经阅读了关于如何做到这一点的相互矛盾的信息。我想我应该使用 Buffer 对象,但不确定如何使用。我有以下内容,但它似乎无法正常工作。有什么建议吗?

function ReadBinaryData(successCallback){               
    var streamHandle = fs.createReadStream("PATH TO FILE",  {encoding: 'binary'});      
    var contentRead = '';       
   streamHandle.addListener('data', function(data) {            
        contentRead += data;                            
    });

   streamHandle.addListener('end', function(data) {                         
        successCallback(contentRead);       
    });     
};

【问题讨论】:

  • 当我记录输出时,我没有得到二进制数据。我得到乱码字符。如何输出二进制文件或验证输出确实是二进制文件? (请原谅我对二进制数据缺乏了解)

标签: javascript file-io node.js


【解决方案1】:

我在 5.x 分支中使用了 nodejs Buffer。我会在那里查看文档并阅读。那里有很多新方法可以帮助您处理二进制流。虽然,在未来的版本中将删除二进制选项,所以您可能需要重新考虑您在做什么以及为什么。

http://nodejs.org/docs/v0.5.6/api/buffers.html

这里是一个使用缓冲区的示例,我使用的是 5.x 分支来处理这段代码,有一个类似的方法,比如 writeUInt32LE,但用于二进制。也有相应的读取方法。如果您不能使用 5.x 分支,您也许可以查看 nodejs javascript 库,看看他们的方法如何将字符串转换为您想要的格式。

  var cur = this.network.ipInt;
  var bcast = this.broadcast.ipInt;
  var addresses = new Buffer((bcast-cur)*10);
  var offset = 0;
  while (cur < bcast){
    cur += 1;
    addresses.writeUInt32LE(cur,offset);
    offset+=10;
  }

【讨论】:

    猜你喜欢
    • 2017-01-12
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多