当前位置: 首页 > 知识库问答 >
问题:

缓冲区是ArrayBuffer吗?

须原
2023-03-14

我试图读取名为example的文件的前100个字节。txt使用fs。读取此节点中的。JS代码

"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.alloc(100)。缓冲区new Uint8Array(100)也不能解决此问题。我目前正在使用节点。JS版本14.17.6(LTS)。

共有1个答案

寇宏义
2023-03-14

语法是:fs。read(fd,[options,]callback)options:是一个对象,它有一个属性buffer,默认值为buffer。alloc(16384)

财政司司长。打开(“example.txt”,函数(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 }%)`);

        }

    });

}

});

 类似资料:
  • 我正在从节点切换。js 8。X到节点。js 10。x和我收到一些关于“新建缓冲区”的不推荐的警告 我有一个arrayBuffer,我需要复制到一个Buffer和我的第一个版本是这样的: 但在本例中,不会复制arrayBuffer(https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteof

  • 本文向大家介绍如何将二进制NodeJS缓冲区转换为JavaScript ArrayBuffer?,包括了如何将二进制NodeJS缓冲区转换为JavaScript ArrayBuffer?的使用技巧和注意事项,需要的朋友参考一下 直接访问 buf.buffer属性,将二进制NodeJS Buffer转换为JavaScript ArrayBuffer。通过原始Buffer实例进行的写操作将写入Arra

  • 纯JavaScript是Unicode友好的,但二进制数据却不是这样。 在处理TCP流或文件系统时,必须处理八位字节流。 Node提供了Buffer类,它提供了存储类似于整数数组的原始数据的实例,但对应于V8堆外部的原始内存分配。 Buffer类是一个全局类,可以在应用程序中访问而无需导入缓冲区模块。 创建缓冲区 节点缓冲区可以以多种方式构建。 Method 1 以下是创建10个八位字节的无启动缓

  • 问题内容: 是缓冲还是无缓冲? 我读到这是的对象,并且是所引用的对象的类型。 而且它们都是Unbuffered的,所以为什么要刷新unbuffered …是否可以刷新unbuffered,我已经读过它们被立即写入。 问题答案: 是“标准”输出。在大多数操作系统上,终端io被缓冲,并且支持分页。 在Javadoc中, “标准”输出流。该流已经打开并且准备接受输出数据。通常,此流对应于主机环境或用户指

  • Javascript ArrayBuffer或TypedArrays没有任何类型的appendByte()、appendBytes()或appendBuffer()方法。所以,如果我想一次填充一个数组缓冲一个值,我该怎么做呢?

  • 主要内容:1 Buffer的基本使用,2 Buffer的容量、位置、限制,3 Buffer的类型,4 Buffer的分配,5 将数据写入Buffer,6 从Buffer读取数据与NIO通道进行交互时,将使用Java NIO缓冲区。如您所知,数据从通道读取到缓冲区,然后从缓冲区写入通道。 缓冲区本质上是一个内存块,您可以在其中写入数据,然后可以在以后再次读取。该内存块包装在NIO Buffer对象中,该对象提供了一组方法,可以更轻松地使用该内存块。 1 Buffer的基本使用 使用Buffer来读