将字节传递给NodeJS Addon

时间:2015-07-13 16:45:22

标签: javascript node.js v8

我想用wav文件创建一个流,并将其传递给我的NodeJS插件:

var readableStream = fs.createReadStream('random_file.wav');
readableStream.on('data', function(chunk) {
        var chunck_to_binary = chunk.toString('what??'); //binary??
        var obj1 = addon.store(chunck_to_binary);
        console.log('chunck');
        console.log(obj1.caract_count);
        //console.log(typeof data);
    });

然后,当所有文件都已通过。我想将字节转移到Nodejs,只是为了确保所有进程都是正确的。并创建一个副本:

readableStream.on('end', function() {
    console.log("loaded");

    var data_copy = addon.return_bytes();

    fs.writeFile('copy.wav', data_copy, function (err) {
        if (err) return console.log(err);
        console.log('done!!');
    });

});

在插件中我实现了这样的一些:

void store_values(const FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);

if (args.Length() < 1) {
    isolate->ThrowException(Exception::TypeError(
        String::NewFromUtf8(isolate, "Wrong number of arguments")));
    return;
}

v8::String::Utf8Value param1(args[0]->ToString());
std::string aux= std::string(*param1); //JS---->C++

//file_in_memory is global
file_in_memory = file_in_memory + aux;
//(..) return byte size of file_in_memory

}

到目前为止,我还没有成功。有什么可能错的?我认为问题是我如何将信息传递给插件。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

chunkBuffer,这很好,因为它基本上只是一大块字节。只需按原样传递给您的插件:

var obj1 = addon.store(chunk);

在您的插件中,您可以将其转换为std::string,如下所示:

std::string aux(node::Buffer::Data(args[0]), node::Buffer::Length(args[0]));