2011-09-14 64 views
3

我有一个名为ReadBinaryData()的函数,我想创建一个Read Stream来读取二进制数据并通过回调将二进制数据返回给调用函数。看来你可以通过几种不同的方式来做到这一点,我已经阅读了有关如何做到这一点的冲突信息。我想我应该使用Buffer对象,但不知道如何。我有以下,但它似乎并没有正常工作。有什么建议么 ?从NodeJS返回二进制数据

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);  
    });  
}; 
+0

当我登录输出我没有得到二进制数据。我收到乱码。如何输出二进制文件或验证输出是否确实是二进制文件? (请原谅我对二进制数据的理解不够) –

回答

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; 
    }