使用NodeJ缓冲内存中的整个文件

Leo*_*ssi 28 buffer stream node.js

我有一个相关的小文件(几百千字节),我希望在内存中直接访问整个代码执行.

我不确切知道NodeJ的内部,所以我问是否fs open足够或我必须读取所有文件并复制到Buffer

Gol*_*den 60

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

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

var fs = require('fs');

var data = fs.readFileSync('/etc/passwd');
Run Code Online (Sandbox Code Playgroud)

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

var fs = require('fs');

fs.readFile('/etc/passwd', function (err, data ) {
  // ...
});
Run Code Online (Sandbox Code Playgroud)

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

var fs = require('fs');

fs.readFile('/etc/passwd', { encoding: 'utf8' }, function (err, data ) {
  // ...
});
Run Code Online (Sandbox Code Playgroud)

有效编码是utf8,ascii,utf16le,ucs2,base64hex.还有一个binary编码,但它已被弃用,不应再使用了.您可以在相应的文档中找到有关如何处理编码和缓冲区的更多详细信息.


vku*_*kin 11

一样容易

var buffer = fs.readFileSync(filename);
Run Code Online (Sandbox Code Playgroud)


Mic*_*ole 7

使用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....
  }
Run Code Online (Sandbox Code Playgroud)

fs是文件系统. readFileSync()如果你问的话会返回一个Buffer或string.

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

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

return readFileSync(path,{ encoding: 'utf8' });
Run Code Online (Sandbox Code Playgroud)