Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Buffer.bytellength返回完全不同的字节长度_Javascript_Node.js_Buffer - Fatal编程技术网

Javascript Buffer.bytellength返回完全不同的字节长度

Javascript Buffer.bytellength返回完全不同的字节长度,javascript,node.js,buffer,Javascript,Node.js,Buffer,使用Node.jsv5.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

使用Node.jsv5.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 ... >

我加载的映像在文件系统(OSX)上为109055字节(磁盘上为111KB),但我的内容长度计算返回198147字节。如果我将编码设置为ascii,它将返回104793字节。更接近,但仍然不正确


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

如文档中所述,返回假定特定编码的字符串的字节长度


Buffer
类型实际上是一个
ArrayBuffer
,这意味着可以通过属性获取它的长度。另外,Node的实现添加了一个提供相同长度的
length
属性

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

关于最后一项(
Buffer.byteLength()
),我不能完全确定我的解释是否正确,但这是我从这里的简要描述中所能想到的最好的解释:

你不是指
self.data.byteLength
?哈!是的,这完全有效。谢谢如果你愿意的话,把它当作回答扔进去好吗?如果您知道为什么存在另一种方法,它可以工作,但返回了错误的值,那也太好了;)需要一个字符串作为第一个参数,而不是缓冲区,因此可能正在进行的转换会弄乱它。数据是否在
self.data
text中?我试图获取http响应的内容长度。当我使用
buffer.length
buffer.toString().length时,
我得到了相同的值,
52700
。但是当我尝试使用
缓冲区时,通过tellength
,我得到了
59241
。另外,当我使用
Buffer.bytellength(Buffer,'utf8')
时,我得到了
89212
<响应标题中的代码>内容长度为
59241
。这些方法之间有什么区别?为什么它们得到不同的值?这使我困惑。“你能帮帮我吗?”张露瑶这也让我很困惑!我尽了最大的努力从网上找到的信息中定义这四种方法,但我可能误解了其中的一些方法;特别是,对于您的情况,
bytellength
大于
length
这一事实表明,我对这两个的定义是不正确的(他们的建议正好相反)。:/所以很不幸,我显然也在同一条船上。不过,如果你能更准确地找出区别,请随时提出编辑建议!