javascript - Buffer.byteLength 返回截然不同的字节长度

标签 javascript node.js buffer

使用 Node.js v5.1.0,我正在尝试确定缓冲区的内容长度。因此,我正在这样做:

Buffer.byteLength(self.data, 'utf8')

self.data 看起来像这样:

<Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 f0 00 f0 00 00 ff db 00 43 00 05 03 04 04 04 03 05 04 04 04 05 05 05 06 07 0c 08 07 07 07 07 0f 0b 0b 09 ... >

我正在加载的图像在文件系统 (OS X) 上为 109,055 字节(磁盘上为 111 KB),但我的内容长度计算返回 198,147 字节。如果我将编码设置为 ascii,它会返回 104,793 字节。更接近,但仍然不正确。

我计算正确吗?我需要对缓冲区做些什么才能让它返回正确的值吗?如果我做对了,为什么会出现差异?如果我做错了,那么请分享 ;)

最佳答案

我认为区别如下:

  • buffer.length : 缓冲区的已用+保留长度。
  • buffer.byteLength : 缓冲区的使用长度。
  • buffer.toString().length :缓冲区字节的默认字符串呈现/解释中的字符数。您可以通过提供不同的编码来更改该渲染/解释。 (例如 toString("ascii"))
  • Buffer.byteLength(buffer, targetEncoding) : 了解“缓冲区”中的字节使用 UTF-8 编码(即字节要呈现/解释为 UTF-8 字符串),这将返回存储该 UTF-8 字符串所需的字节数一些指定的编码(targetEncoding)。

关于最后一项 (Buffer.byteLength()),我不完全确定我的解释是否正确,但这是我能从这里的简短描述中得出的最好结论:https://nodejs.org/api/buffer.html#buffer_class_method_buffer_bytelength_string_encoding

编辑:根据this comment ,上面的描述对于 buffer.lengthbuffer.byteLength 之一似乎是不正确的(因为它们有一个 Buffer,其 byteLength 更高比它的长度)。如果有人找到不匹配的解释,请评论或编辑此帖子以进行修复!

关于javascript - Buffer.byteLength 返回截然不同的字节长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233725/

相关文章:

javascript - 根据字符串输入查找日期值

JavaScript while 循环不适用于 for 循环

node.js - 如何在 Brunch 中设置环境变量

c - C语言中如何清除缓冲区?

database - 内存高效的大型数据集流式传输到 S3

casting - 为什么ByteData.view(buffer)抛出NoSuchMethodError:类 'String'没有实例方法 'asByteData'

javascript - jquery 与 google 闭包 ajax

javascript - 谷歌散点图 - Y 轴中的字符串值

javascript - 在 javascript 中实现 promise 类

node.js - 如何使用reactjs在Axios中没有数据时显示消息?