Node.js NodeJS:fs.createReadStream有时不读取所需的;“开始”;及;完";字节
我目前正在使用Node.js NodeJS:fs.createReadStream有时不读取所需的;“开始”;及;完";字节,node.js,fs,Node.js,Fs,我目前正在使用fs.createReadStream从文件中读取一定数量的字节 这是我的密码 const readFile = (file, start, end) => { return new Promise((resolve, reject) => { let readStream = fs.createReadStream(file, { start : start, end: start+end }) readStream.on("error"
fs.createReadStream
从文件中读取一定数量的字节
这是我的密码
const readFile = (file, start, end) => {
return new Promise((resolve, reject) => {
let readStream = fs.createReadStream(file, { start : start, end: start+end })
readStream.on("error", () => {console.log("Error occured on " + file)})
readStream.on('data', function(d) {
console.log(start)
console.log(start+end)
console.log(d.byteLength)
resolve(d)
});
})
}
我将开始设置为0。和结尾作为所需字节(例如:5000)
此函数在循环中运行(假设此函数运行10次)
这是输出(我记录了我得到的尺寸)
注意那些只阅读少于5000的人
只有当我在一个超过10次的循环中多次运行这个时,才会发生这种情况
这里有什么问题
编辑:如您所见,参数都是相同的。甚至这些文件都是原始文件的多个副本
编辑2.0:
这解决了我的问题!为了获得所需的数据,我初始化了一个缓冲区并连接了.on('data')
中的块,最后在.on('end')
上解析
以下是更新后的函数:
const readFile = (file, start, end) => {
return new Promise((resolve, reject) => {
let data = Buffer.alloc(0)
let readStream = fs.createReadStream(file, { start : start, end: start+end })
readStream.on("error", () => {console.log("Error occured on " + file)})
readStream.on('data', function(d) {
data = Buffer.concat([data, d])
});
readStream.on("end", function(d) {
console.log(file)
console.log(start)
console.log(start+end)
console.log(data.byteLength)
resolve(data)
})
})
}
非常感谢tawfik nasser 您正在使用ReadStream。
因此,.on('data')
返回数据的chunk
此外,您正在解析第一个数据块
您应该在('end')上解析,而不是在每次获取数据块时解析。您使用的是ReadStream。
因此,.on('data')
返回数据的chunk
此外,您正在解析第一个数据块
您应该在('end')
上解析,而不是在每次获取数据块时解析。添加有关调用函数的更多信息将很有帮助。您已经提到它在循环中被调用了10次。循环是异步的还是所有调用的参数都相同?参数都相同。该函数在返回承诺的.map内调用。然后我在使用Promise.all()后处理它们。我现在想知道为什么与其他调用相比,它只返回几个字节?添加一些关于调用函数的更多信息会很有帮助。您已经提到它在循环中被调用了10次。循环是异步的还是所有调用的参数都相同?参数都相同。该函数在返回承诺的.map内调用。然后我在使用Promise.all()后处理它们。我现在想知道为什么与其他调用相比,它只返回几个字节?谢谢!!成功了!现在我了解了Readstream的工作原理。起初我认为('data')
上的.on给出了整个数据。因此它只是一块数据。接受了你的回答!还编辑了我如何使其工作的问题。谢谢!!使其工作!现在我了解了Readstream的工作原理。起初我认为.on('data'
给出了全部数据。所以它只是一块数据。接受了你的答案!还编辑了我如何让它工作的问题。
const readFile = (file, start, end) => {
return new Promise((resolve, reject) => {
let data = Buffer.alloc(0)
let readStream = fs.createReadStream(file, { start : start, end: start+end })
readStream.on("error", () => {console.log("Error occured on " + file)})
readStream.on('data', function(d) {
data = Buffer.concat([data, d])
});
readStream.on("end", function(d) {
console.log(file)
console.log(start)
console.log(start+end)
console.log(data.byteLength)
resolve(data)
})
})
}