首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Buffer是ArrayBuffer吗?

Buffer是ArrayBuffer吗?
EN

Stack Overflow用户
提问于 2021-09-15 20:03:20
回答 1查看 69关注 0票数 0

我正在尝试使用以下Node.JS代码中的fs.read读取名为example.txt的文件的前100个字节:

代码语言:javascript
复制
"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 }%)`);
            }
        });
    }
});

但是运行代码会产生这个错误:

代码语言:javascript
复制
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).buffernew Uint8Array(100)替换Buffer.alloc(100)也不能解决这个问题。我目前使用的是Node.JS版本14.17.6 (LTS)。

EN

回答 1

Stack Overflow用户

发布于 2021-09-15 20:40:23

语法是: fs.read(fd,options,callback) options :是一个对象,它有一个属性buffer,它的默认值是Buffer.alloc(16384)

fs.open("example.txt",function(err,fd) {

代码语言:javascript
复制
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 }%)`);

        }

    });

}

});

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69199150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档