Node.js如何读取和写入文件为二进制文件

时间:2016-05-20 12:33:57

标签: arrays node.js binary buffer

我需要从文件中读取一个大数组。通常我会把它保存为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 :-(

我正在关注这个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,
  ...

1 个答案:

答案 0 :(得分:0)

实际上,将二进制文件写入文件非常简单。对FS中的writeFileSync方法使用“二进制”编码类型字符串。像这样:

IF (@Flag='Authenticate')
BEGIN

Declare @UserID varchar(50) = null

SELECT @UserID = UserID  FROM UserInformation WITH(NOLOCK) WHERE UserName=@UserName and Password=@UserPassword )
 IF (@UserID is not NULL)
 BEGIN

  INSERT INTO UserLoginHistory(UserId,LastLoggedIn)
  SELECT @Userid,GETDATE()

  SELECT @Userid 
 END
END

现在,您可以检查文件的大小是否与类型数组的字节大小匹配。例如,myArray.length * 4将是您的数据大小,在我的情况下是1228624。文件系统显示:

// Assume you have an Int32Array called myArray

var fs = require('fs');
fs.writeFileSync('/tmp/test.bin', myArray, 'binary');