47

我有一个相对较小的文件(大约数百千字节),我想将它放在内存中,以便直接访问代码的整个执行过程。

我不确切知道 Node.js 的内部结构,所以我问 afs open是否足够,或者我必须读取所有文件并复制到 a Buffer

4

3 回答 3

82

基本上,您需要使用模块中的readFileorreadFileSync函数fs。它们返回给定文件的完整内容,但它们的行为不同(异步与同步)。

如果阻塞 Node.js(例如在您的应用程序启动时)不是问题,您可以使用同步版本,这很简单:

var fs = require('fs');

var data = fs.readFileSync('/etc/passwd');

如果你需要异步,代码是这样的:

var fs = require('fs');

fs.readFile('/etc/passwd', function (err, data ) {
  // ...
});

请注意,无论哪种情况,您都可以将options对象作为第二个参数,例如指定要使用的编码。如果省略编码,则返回原始缓冲区:

var fs = require('fs');

fs.readFile('/etc/passwd', { encoding: 'utf8' }, function (err, data ) {
  // ...
});

有效的编码是utf8asciiutf16leucs2和。还有一种编码,但它已被弃用,不应再使用。您可以在相应的文档中找到有关如何处理编码和缓冲区的更多详细信息。base64hexbinary

于 2013-10-31T12:33:36.587 回答
21

As easy as

var buffer = fs.readFileSync(filename);
于 2013-10-31T12:30:57.430 回答
14

使用 Node 0.12,现在可以同步执行此操作:

  var fs = require('fs');
  var path = require('path');

  // Buffer mydata
  var BUFFER = bufferFile('../public/mydata');

  function bufferFile(relPath) {
    return fs.readFileSync(path.join(__dirname, relPath)); // zzzz....
  }

fs是文件系统。 如果您询问, readFileSync()返回一个缓冲区或字符串。

fs正确假设相对路径是一个安全问题。 path是一种解决方法。

要作为字符串加载,请指定编码:

return readFileSync(path,{ encoding: 'utf8' });
于 2015-04-26T04:11:49.553 回答