将二进制字符串/文件内容从c ++传递到节点js

时间:2017-08-23 20:52:00

标签: c++ node.js binary node-gyp

我试图使用node-gyp库将二进制文件的内容从c ++传递到节点。我有一个使用.fit格式创建二进制文件的进程,我需要将文件的内容传递给js来处理它。所以,我的第一个方法是在字符串中提取文件的内容,并尝试将其传递给节点。

   char c;
   std::string content="";
   while (file.get(c)){
    content+=c;
   }

我使用以下代码将其传递给Node

v8::Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(args.GetIsolate(), (void*)content.data(), content.size());
args.GetReturnValue().Set(ab);

在节点a中获取一个arrayBuffer,但是当我将内容打印到文件时,它与显示c ++ cout的内容不同。

如何成功传递二进制数据?

感谢。

2 个答案:

答案 0 :(得分:1)

  1. 可能最好的方法是将数据写入二进制磁盘文件。用C ++写入磁盘;从NodeJS中的磁盘读取。

  2. 非常重要的是,请务必指定 BINARY MODE

    例如:

    myFile.open ("data2.bin", ios::out | ios::binary);

  3. 不要使用&#34;字符串&#34; (至少除非你想要uuencode)。使用缓冲区。这是一个很好的例子:

  4. How to read binary files byte by byte in Node.js

    var fs = require('fs');
    
    fs.open('file.txt', 'r', function(status, fd) {
        if (status) {
            console.log(status.message);
            return;
        }
        var buffer = new Buffer(100);
        fs.read(fd, buffer, 0, 100, 0, function(err, num) {
            ...
        });
    });
    
    1. 您可能还会发现这些链接很有用:

    2. 附录:

      • OP澄清说他正在考虑将C ++用作 NodeJS Add-On (而不是一个独立的C ++程序。

      • 因此,使用缓冲区绝对是一种选择。这是一个很好的教程:

      https://community.risingstack.com/using-buffers-node-js-c-plus-plus/

      如果您选择这条路线,我会在您自己的应用程序中实现缓冲区之前,明确地下载示例代码并首先使用它。

答案 1 :(得分:0)

这取决于例如使用redis

  

值可以是各种字符串(包括二进制数据)   实例,您可以将jpeg图像存储在值中。价值不可能   大于512 MB。

如果文件大于512MB,则可以将其存储为块。 但我不建议,因为这是一个内存数据存储

它易于在c ++和node.js中实现