如何在nodejs中计算数组的实际字节大小



我正在节点应用程序中的AWS OpenSearch中进行批量索引,但由于块大小太大而失败。以下是错误

Request size exceeded 104857600 bytes

所以我需要计算实际的块大小(以字节为单位(。所以我尝试了以下两种方法,但不确定哪一种是正确的。

// with Buffer
const str = 'tree'
const obj = [{a:'sas'},{a:'e'}]
console.log(Buffer.from(str).length); ---> 4
console.log(Buffer.from(obj).length); ---> 2
// with object-sizeof
var sizeof = require('object-sizeof')
const str = 'tree'
const obj = [{a:'sas'},{a:'e'}]
console.log(sizeof(str)); ---> 8
console.log(sizeof(obj)); ---> 12

"Buffer"似乎为一个字符占用1个字节,而"object sizeof"为一个字符串占用2个字节。那么这里什么是正确的呢?检查实际对象数组的字节大小的正确方法是什么?提前感谢

对于任何类型的值:

const { serialize } = require('v8')
// i.e
const variable = true 
console.log(serialize(variable).byteLength) // 3

3=0x03 0x01 0x00

标头字节指示值的类型(对于布尔值为0x03(,后跟一个字节指示布尔值(对于true为0x01,对于false为0x00(


使用:Buffer.byteLength(string, 'utf8'),将强制使用Buffer.byteLength(string.toString(), 'utf8')true为4,false为5,而对于对象,由于[Object, Object],将始终为15,也可以使用Buffer.byteLength(JSON.stringify(object), 'utf8'),这也将返回不正确的已用内存值。

根据JavaScript字符串中有多少字节的答案?您可以使用Buffer.byteLength(string, 'utf8')来获取字符串的字节大小。

无论如何,javascript中的字符大小是2字节,所以我想它与typescript/node.js相同:https://developer.mozilla.org/en-US/docs/Web/API/DOMString/Binary

最新更新