Node.js如何将数组读写为二进制文件



我有一个大数组,需要从文件中读取。通常我会将其保存为JSON,但UTF-8编码文件的大小要大得多,而且我对大小有非常严格的要求,所以每Kb都很宝贵。

到目前为止,我拥有的是:

// https://www.npmjs.com/package/typedarray-to-buffer
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 :-(

我正在阅读这篇关于编写二进制文件的有用文章,但它没有涵盖如何将它们读回。我认为我陷入困境的部分是将缓冲区数据转换回数组。

更新

以下是数组写入文件之前的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

最新更新