我有一个相对较小的文件(大约数百KB),我想将其保存在内存中,以便直接访问整个代码执行过程。
我不确切知道 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
对象作为第二个参数,例如指定要使用的编码。如果省略编码,则返回原始缓冲区:
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' });