当前位置: 首页 > 面试题库 >

如何将二进制数据附加到node.js中的缓冲区

酆高翰
2023-03-14
问题内容

我有一些二进制数据的缓冲区:

var b = new Buffer ([0x00, 0x01, 0x02]);

我想追加0x03

如何追加更多二进制数据?我正在搜索文档,但是要附加数据,它必须是字符串,否则,将发生错误( TypeError:Argument必须是string ):

var b = new Buffer (256);
b.write ("hola");
console.log (b.toString ("utf8", 0, 4)); //hola
b.write (", adios", 4);
console.log (b.toString ("utf8", 0, 11)); //hola, adios

然后,我在这里看到的唯一解决方案是为每个附加的二进制数据创建一个新缓冲区,并将其复制到具有正确偏移量的主缓冲区中:

var b = new Buffer (4); //4 for having a nice printed buffer, but the size will be 16KB
new Buffer ([0x00, 0x01, 0x02]).copy (b);
console.log (b); //<Buffer 00 01 02 00>
new Buffer ([0x03]).copy (b, 3);
console.log (b); //<Buffer 00 01 02 03>

但这似乎效率不高,因为我必须为每个追加实例化一个新的缓冲区。

您知道附加二进制数据的更好方法吗?

编辑

我已经写了一个BufferedWriter,它使用内部缓冲区将字节写入文件。与BufferedReader相同,但用于写入。

一个简单的例子:

//The BufferedWriter truncates the file because append == false
new BufferedWriter ("file")
    .on ("error", function (error){
        console.log (error);
    })

    //From the beginning of the file:
    .write ([0x00, 0x01, 0x02], 0, 3) //Writes 0x00, 0x01, 0x02
    .write (new Buffer ([0x03, 0x04]), 1, 1) //Writes 0x04
    .write (0x05) //Writes 0x05
    .close (); //Closes the writer. A flush is implicitly done.

//The BufferedWriter appends content to the end of the file because append == true
new BufferedWriter ("file", true)
    .on ("error", function (error){
        console.log (error);
    })

    //From the end of the file:
    .write (0xFF) //Writes 0xFF
    .close (); //Closes the writer. A flush is implicitly done.

//The file contains: 0x00, 0x01, 0x02, 0x04, 0x05, 0xFF

最后更新

使用concat。


问题答案:

更新了Node.js的答案〜> 0.8

Node现在可以自行连接缓冲区。

var newBuffer = Buffer.concat([buffer1, buffer2]);

Node.js的旧答案〜0.6

我使用模块来添加.concat功能,其中包括:

https://github.com/coolaj86/node-bufferjs

我知道这不是一个“纯粹”的解决方案,但是对于我的目的来说,它非常有效。



 类似资料:
  • 问题 你想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作。 或者你想原地修改数据并将它写回到一个文件中去。 解决方案 为了读取数据到一个可变数组中,使用文件对象的 readinto() 方法。比如: import os.path def read_into_buffer(filename): buf = bytearray(os.path.getsize(filena

  • 问题内容: 在Python中,您可以将StringIO用作字符数据的文件状缓冲区。内存映射文件基本上对二进制数据执行类似的操作,但是它需要一个用作基础的文件。Python是否有一个用于二进制数据且仅是内存的文件对象,相当于Java的ByteArrayOutputStream? 我的用例是我想在内存中创建一个ZIP文件,而ZipFile需要一个类似文件的对象。 问题答案: 您可能正在寻找io.Byt

  • 问题内容: 我是nodejs的新手,正在尝试设置一个服务器,在该服务器上我可以从映像中获取exif信息。我的图片在S3上,因此我希望能够仅将s3 url作为参数传递并从中获取图片。 我正在使用下面的ExifImage项目来获取exif信息并根据其文档进行操作: “除了在文件系统中提供图像的文件名,您还可以将缓冲区传递给ExifImage。” 如何将图像从URL加载到节点的缓冲区中,以便将其传递给E

  • 我有一个二进制数据缓冲区,我想存储在协议缓冲区中。 在留档(https://developers.google.com/protocol-buffers/docs/proto#scalar)中,它说类型等价于C中的。我无法相信这一点,所以我不得不尝试它,是的,这似乎是这样... 本协议: 给出一个包含以下内容的消息定义: 公共setter/getter API如下所示: 当然,这不是在消息中存储二

  • 问题内容: 以下代码使用SerialPort模块来侦听来自蓝牙连接的数据。 我希望在控制台中看到十六进制格式的数据流。但是控制台仅显示了一些奇怪的符号。我想知道如何在控制台中解码和显示数据。 问题答案: 此代码将数据缓冲区显示为十六进制字符串:

  • 本文向大家介绍如何将二进制NodeJS缓冲区转换为JavaScript ArrayBuffer?,包括了如何将二进制NodeJS缓冲区转换为JavaScript ArrayBuffer?的使用技巧和注意事项,需要的朋友参考一下 直接访问 buf.buffer属性,将二进制NodeJS Buffer转换为JavaScript ArrayBuffer。通过原始Buffer实例进行的写操作将写入Arra