ecmascript和nodejs中的Buffer

111 阅读1分钟

1:js和node中缓冲池有:ArrayBufferBufferSharedArrayBufferArrayBufferSharedArrayBufferECMAScript 的标准,其中 Buffer 仅在 nodejs 中可用。它们存储的都是原始二进制数据,也提供了一些操作二进制数据的api。

2:为了扩展操作缓冲池中数据的能力,可以创建一个视图层。创建视图的api有 DataViewTypedArray,其中TypedArray包括Float32ArrayInt8ArrayUint8Array等将二进制数据解析为各种数字类型的视图层,如下:

type TypedArray =
    | Uint8Array
    | Uint8ClampedArray
    | Uint16Array
    | Uint32Array
    | Int8Array
    | Int16Array
    | Int32Array
    | BigUint64Array
    | BigInt64Array
    | Float32Array
    | Float64Array;

TypedArray 是一个类型,无法被实例化,是上面所描述视图层的联合类型。DataView 只能操作 ArrayBufferSharedArrayBufferTypedArray 能操作所有缓冲池。

ArrayBufferViewTypedArrayDataView 两个视图的联合类型,也只是一个类型,无法被实例化。

type ArrayBufferView = TypedArray | DataView;

3:如果遇到下面这个错误,可以使用 toString()Buffer 转换为 string

Typescript error TS2345 Error: TS2345:Argument of type 'Buffer' is not assignable to parameter of type 'string'

在使用 writeFileSync 时,可能会遇到下面的错误,可以使用new Uint8Array(resBuffer)Buffer 转换为这种 TypedArray,在 ts 的类型转换上就不会报错,该错误在处理图像读写时会出现。

Typescript error TS2345 Error: TS2345:Argument of type 'Buffer' is not assignable to parameter of type ' string | NodeJS.ArrayBufferView '