如何在nodejs中知道字节缓冲区内容的实际大小?

47

我得到的是字节缓冲区文件,不能使用fs.stat()方法。因此,我尝试使用buf.length,但该长度是指分配给缓冲区对象的内存量而不是实际内容大小。例如,我有一个大小为22,449字节的文件。buf.length返回39804。


使用 Node 6.10.0,buf.length 可以给出文件的确切字节大小。 - bob
1个回答

102

你需要使用byteLength方法:

var buff = fs.readFileSync(__dirname + '/test.txt');
console.log(Buffer.byteLength(buff));

对于节点0.10.21,您可以尝试以下操作:

更新 buffer.toSTring() 不安全,因为缓冲区用于存储二进制数据,toString() 将尝试进行字符编码转换,这将破坏二进制数据。

console.log(buff.toString().length);

非常感谢!您知道如何使其适用于Node 0.10.21吗? - lor1an
2
谢谢,buf.toString('ascii').length 对我来说完美无缺。 - lor1an
1
@lor1an的回答对我也有用。我没有使用fs,而是使用另一个库返回了一个字节数组,我需要找到content-length的值。 - BugHunterUK
3
在Node v13中,Buffer.byteLength()是一个实例方法。此外,如果您有多字节字符,例如Buffer.from("€").length // is 3,则buf.toString().length可能会有所偏差。 - pspi
3
需要注意的是,Buffer.byteLength(buff)buff.toString().length的值可能不同,在使用form-data上传文件时可能会出现问题。 - Gompro
除以1024可得到以KB为单位的大小。 - martinho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接