节点js,如何写入/读取整数到二进制文件?

狮子

我对此并不陌生,因此可能会问一个基本问题。我有很多花车

[1.3, 2.0, 10, 9.8, ... ] . //let's say length = 10

我想将其存储在二进制文件中。我想用以下格式写

 10 1.3 2.0 10 9.8, ...  

因此,当我以后加载该文件时,我先读取长度10,然后读取浮点数10次。

我认为这可以节省空间,并且应该比仅以文本形式写入/读取更快。

到目前为止,我在node.js中找到了有关二进制文件的一些信息。

  var fs = require('fs');
  var wstream = fs.createWriteStream('myBinaryFile');
  var buffer = crypto.randomBytes(100);
  wstream.write(buffer);
  wstream.end();

我不知道如何将数字写入缓冲区并将缓冲区写入文件。

另外,我阅读了一些文档,其中说节点中的缓冲区只有0到255的整数,这是否意味着它不能处理大于255的整数?

例如,如何写/读数组

  [11000, 24535, 92833, 45353, ... ] 

到/来自二进制文件。

我想我需要一些指导,因此在这里寻求帮助。请指出我该怎么办,谢谢!

slebetman

您需要使用一个Buffer(或标准的Uint8Array,但是由于这是node.js,因此我将使用Buffer)。通过阅读文档,您基本上可以弄清楚您需要做什么,但是我将描述您需要做什么才能获得一个良好的开端。

首先,您需要做出几个决定。

  1. 您是否希望整数是8位或16位或32位或48位?(是的,node支持48位int,但不支持64位-可能是因为js中的数字是52位尾数的两倍,所以64位int无法准确转换为数字)。另外,如果要浮点数,是否要浮点数(32位)或双精度数(64位)?

  2. 您要将数字存储为大端还是小端吗?FWIW,程序员倾向于小端,而硬件设计师倾向于大端。并不重要,但是要保持一致不要在单个文件中混合字节序。

现在您已经下定决心,让我们做一个例子。假设您要在文件中存储两个32位int和一个double。您需要的空间是32 + 32 + 64 = 128 bits = 16 bytes因此,您需要一个16字节的缓冲区(是的,缓冲区以字节级别运行,基本上已经暂时晋升为C程序员):

var b = Buffer.alloc(16);

现在让我们存储这些数字。假设您决定将它们存储为小端编号:

var x = 12345;
var y = 54321;
var z = 1.234;

b.writeInt32LE(x,0);  // write x to bytes 0-3
b.writeInt32LE(y,4);  // write y to bytes 4-7
b.writeDoubleLE(z,8); // write z to end of buffer

现在,您可以b使用任何fs写函数将缓冲区的值写到文件中。请注意,应将编码设置为,"binary"因为fs函数的默认编码为utf8,它可能会尝试解析数据并破坏数据。

要从文件中读取值,请执行相反的操作。使用buffer.read...功能。同样,"binary"从磁盘读取文件时,请确保将编码设置为(或“缓冲”?)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

二进制文件写入后读取负整数

来自分类Dev

读取/写入二进制文件

来自分类Dev

读取整数的二进制文件

来自分类Dev

读取已发布的二进制文件并写入新的二进制文件

来自分类Dev

在C ++中向文件流写入/读取二进制字节/整数/长

来自分类Dev

Matlab将整数写入二进制文件

来自分类Dev

在Clisp中以二进制模式写入/读取文件

来自分类Dev

写入/读取二进制/文本文件

来自分类Dev

写入和读取Java二进制文件

来自分类Dev

二进制文件读取-写入不起作用

来自分类Dev

如何在没有阻塞循环的情况下读取节点js中的大型二进制文件?

来自分类Dev

从C中的文件读取二进制整数

来自分类Dev

从二进制文件C ++读取16位整数

来自分类Dev

从二进制写入和读取

来自分类Dev

如何在Java中从二进制文件写入和读取学生对象

来自分类Dev

二进制文件写入顺序如何结构?

来自分类Dev

在MATLAB中读取字符串和整数并将其写入二进制文件

来自分类Dev

写入整数并从C ++中的二进制文件中读取它们:字节数错误

来自分类Dev

写入二进制文件块

来自分类Dev

写入二进制文件

来自分类Dev

写入二进制文件的末尾

来自分类Dev

写入二进制文件块

来自分类Dev

写入二进制文件

来自分类Dev

写入二进制文件python

来自分类Dev

如何从二进制文件中获取整数值

来自分类Dev

如何使用VBScript从二进制文件读取

来自分类Dev

如何从二进制文件读取多个结构

来自分类Dev

如何优化C ++二进制文件读取?

来自分类Dev

如何在Julia中读取二进制文件?