我正在尝试使用以下Node.JS代码中的fs.read读取名为example.txt的文件的前100个字节:
"use strict";
const fs = require("fs");
fs.open("example.txt", function(err, fd) {
if(err) {
console.error(err);
} else {
fs.read(fd, Buffer.alloc(100), function onFileRead(err, bytesRead, buffer) {
if(err) {
console.error(err);
} else if(bytesRead >= buffer.byteLength) {
console.log("BEHOLD:\n" + buffer.toString());
} else {
console.log(`Read progress: ${ bytesRead } bytes (${ bytesRead / buffer.length * 100 }%)`);
}
});
}
});但是运行代码会产生这个错误:
TypeError [ERR_INVALID_ARG_TYPE]: The "buffer" argument must be an instance of Buffer, TypedArray, or DataView. Received an instance of ArrayBuffer
←[90m at Object.read (fs.js:492:3)←[39m
at C:\Users\...\bufferTest.js:9:12
←[90m at FSReqCallback.oncomplete (fs.js:155:23)←[39m {
code: ←[32m'ERR_INVALID_ARG_TYPE'←[39m
}这个错误对我来说毫无意义。Buffer.alloc返回的缓冲区怎么可能不是Buffer的实例?用Buffer.alloc(100).buffer或new Uint8Array(100)替换Buffer.alloc(100)也不能解决这个问题。我目前使用的是Node.JS版本14.17.6 (LTS)。
发布于 2021-09-15 20:40:23
语法是: fs.read(fd,options,callback) options :是一个对象,它有一个属性buffer,它的默认值是Buffer.alloc(16384)
fs.open("example.txt",function(err,fd) {
if (err) {
console.error(err);
} else {
let readBuffer = Buffer.alloc(100);
// See here buffer is the name of a property in the options object which is passed to the read method in fs
fs.read(fd, {
buffer: readBuffer
}, function onFileRead(err, bytesRead, buffer) {
if (err) {
console.error(err);
} else if (bytesRead >= buffer.byteLength) {
console.log("BEHOLD:\n" + buffer.toString());
} else {
console.log(`Read progress: ${ bytesRead } bytes (${ bytesRead / buffer.length * 100 }%)`);
}
});
}});
https://stackoverflow.com/questions/69199150
复制相似问题