Tag: 随机访问

随机访问node.js中的大文件(需要支持64位文件偏移量)?

我正在考虑将部分跨平台脚本移植到node.js,部分是因为我现在更熟悉JavaScript,部分原因是由于其他脚本语言对大文件支持的问题。 某些脚本语言似乎对大文件偏移量有补丁支持,这取决于它们是在32位/ 64位操作系统还是处理器上运行,还是需要使用特定标志进行特定编译。 所以我想用node.js来试验,不过谷歌search对于64位偏移量的大文件我没有find任何支持它的方法(或者是库/框架支持等)。 我意识到在某种程度上,这至less取决于JavaScript的底层整数支持。 如果我正确地阅读什么是JavaScript的Max Int? 一个数字可以达到的最高整数值是什么? 看起来JavaScript在内部使用浮点,即使是整数也是如此 最大的确切积分值是2 53 然后,再次node.js是为服务器和服务器应该期望大文件的支持。 node.js是否支持64位文件偏移量? UPDATE 尽pipe_LARGEFILE_SOURCE和_FILE_OFFSET_BITS构build标志,现在我已经开始移植我的项目,需要这个,我发现fs.read(files.d.fd, chunk, 0, 1023, 0x7fffffff, function (err, bytesRead, data)成功,但0x80000000与EINVAL失败。这是在32位Windows 7上运行的版本v0.6.11 。 到目前为止,我不确定这是否仅限于fs的限制,node.js中的错误,还是仅在Windows上构build的问题。 是否打算在所有平台的所有核心模块中的node.js中使用大于31位的文件偏移量?

createReadStream在同一个fd上多次

在前面的问题中 ,似乎从node.js中的文件中进行随机访问读取的唯一方法是使用带有可选fd , start和end字段的fs.createReadStream() 。 这在我最简单的testing中工作得很好。 但在我的项目中,我需要反复读取二进制文件的不同偏移量。 这是一个奇怪的方式,所以我想出了一个最小的testing用例: var fs = require('fs'); fs.open('test.txt', 'r', function (err, fd) { if (err) { console.error('error opening file: ' + err); } else { fs.createReadStream(null, {fd: fd, start: 2, end: 5}).on('error', function (err) { throw e; }).on('close', function () { console.log('outer close'); }).on('data', function (data) { console.log('outer data', data); […]

如何使用node.js从(大)文件中进行随机访问读取?

我错过了什么或者是否node.js的标准文件I / O模块缺乏通常的文件随机访问方法的模拟? seek() / fseek() tell() / ftell() 如果没有这些,那么如何从节点中的大文件读取随机固定大小的logging?