使用NodeJs在内存中caching整个文件
我有一个相当小的文件(大约几百千字节),我想要在内存中直接访问整个代码的执行。
我不清楚NodeJ的内部,所以我问fs open
是否足够,或者我必须读取所有文件并复制到一个Buffer
?
基本上,你需要使用fs
模块的readFile
或者readFileSync
函数。 它们返回给定文件的完整内容,但是它们的行为不同(asynchronous与同步)。
如果阻止Node.js(例如启动应用程序)不是问题,那么可以使用同步版本,这很简单:
var fs = require('fs'); var data = fs.readFileSync('/etc/passwd');
如果你需要去asynchronous,代码是这样的:
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
编码,但不推荐使用,不应再使用。 您可以在相应的文档中find更多关于如何处理编码和缓冲区的细节。
一样容易
var buffer = fs.readFileSync(filename);
使用节点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()返回一个缓冲区或string,如果你问。
fs
正确地假设相对path是一个安全问题。 path
是一个解决方法。
要作为string加载,请指定编码:
return readFileSync(path,{ encoding: 'utf8' });