使用 Node.js 在内存中缓冲整个文件
Posted
技术标签:
【中文标题】使用 Node.js 在内存中缓冲整个文件【英文标题】:Buffer entire file in memory with Node.js 【发布时间】:2013-11-11 10:14:25 【问题描述】:我有一个相对较小的文件(大约数百 KB),我想将它放在内存中,以便在整个代码执行过程中直接访问。
我并不确切知道 Node.js 的内部结构,所以我问fs open
是否足够,或者我必须读取所有文件并复制到Buffer
?
【问题讨论】:
看readFile(),这是你需要的。 【参考方案1】:基本上,您需要使用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
编码,但它已被弃用,不应再使用。您可以在相应的documentation 中找到有关如何处理编码和缓冲区的更多详细信息。
【讨论】:
小错字,在 readFile 函数中编码后缺少逗号(我无法更正,因为编辑少于 6 个字符)【参考方案2】:就这么简单
var buffer = fs.readFileSync(filename);
【讨论】:
【参考方案3】:使用 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() 返回一个 Buffer 或字符串,如果你问的话。
fs
正确假设相对路径是一个安全问题。 path
是一种解决方法。
要作为字符串加载,请指定编码:
return readFileSync(path, encoding: 'utf8' );
【讨论】:
down-mod 有什么原因吗?以上是关于使用 Node.js 在内存中缓冲整个文件的主要内容,如果未能解决你的问题,请参考以下文章
将文件解压缩到内存中,调整文件,压缩并流式传输到客户端(Node.js)