数组作为二进制文件"/>
Node.js如何读取和写入数组作为二进制文件
我有一个大数组,需要从文件中读取。通常,我会将其保存为JSON,但是UTF-8编码文件的大小要大得多,而且我对大小的要求非常严格,因此每个Kb都很珍贵。
这是我到目前为止的内容:
//
var toBuffer = require('typedarray-to-buffer');
var buffer = toBuffer(myArray);
var wstream = fs.createWriteStream('./myArray');
wstream.write(buffer);
// later...
var buff = new Buffer(data); // <-- file data passed in as a buffer
myArray = buff; // <--still binary :-(
我正在关注此helpful article about writing binary files,但是它没有介绍如何读回它们。我认为我所处的部分是将缓冲区数据转回数组。
更新
这里是数组在写入文件之前的console.log()
:
Int32Array {
'0': 2107281600,
'1': -370226405,
'2': 274543611,
'3': 172775319,
'4': -1927927544,
'5': -248215383,
'6': -1295527238,
'7': -1774538531,
'8': -784581845,
'9': 651425656,
'10': -534521241,
'11': -1788883022,
'12': 1679049410,
'13': -1728518340,
...
回答如下:实际上,将二进制文件写入文件非常简单。对FS中的writeFileSync方法使用“二进制”编码类型字符串。像这样:
// Assume you have an Int32Array called myArray
var fs = require('fs');
fs.writeFileSync('/tmp/test.bin', myArray, 'binary');
现在您可以检查文件的大小是否与类型数组的字节大小匹配。例如,myArray.length * 4将是您的数据大小,在我的情况下为1228624。文件系统显示:
$ ls -l /tmp/test.bin
-rw-rw-r-- 1 flatmax flatmax 1228624 May 5 17:58 /tmp/test.bin
更多推荐
Node.js如何读取和写入数组作为二进制文件
发布评论