我有一个相对较小的文件(几百千字节),我希望它在整个代码执行期间都可以在内存中进行直接访问。
我不太了解Node.js的内部机制,所以想问一下是否只需要使用fs open
就可以,还是必须将所有文件读取并复制到Buffer
中?
基本上,您需要使用fs
模块中的readFile
或readFileSync
函数。它们返回给定文件的完整内容,但在行为上有所不同(异步与同步)。
如果阻止Node.js(例如,在应用程序启动时)不是问题,则可以使用同步版本,如下所示:
var fs = require('fs');
var data = fs.readFileSync('/etc/passwd');
如果你需要异步执行,代码如下:
var fs = require('fs');
fs.readFile('/etc/passwd', function (err, data ) {
// ...
});
请注意,在任何情况下,您都可以提供一个options
对象作为第二个参数,例如指定要使用的编码方式。如果省略编码方式,则返回原始缓冲区:
请注意,在任何情况下,您都可以提供一个options
对象作为第二个参数,例如指定要使用的编码方式。如果省略编码方式,则返回原始缓冲区:
var fs = require('fs');
fs.readFile('/etc/passwd', { encoding: 'utf8' }, function (err, data ) {
// ...
});
有效编码包括utf8
、ascii
、utf16le
、ucs2
、base64
和hex
。还有一种binary
编码,但已被弃用,不应再使用。您可以在相应的文档中找到更多有关处理编码和缓冲区的详细信息。
像......一样容易
var buffer = fs.readFileSync(filename);
使用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' });