从stringNode.js缓冲区不正确

要在网页上的JavaScript中创build一个utf-8缓冲区,你需要这样做:

var message = JSON.stringify('ping'); var buf = new TextEncoder().encode(message).buffer; console.log('buf:', buf); console.log('buf.buffer.byteLength:', buf.byteLength); 

这logging:

 buf: ArrayBuffer { byteLength: 6 } buf.buffer.byteLength: 6 

但是,在Node.js中,如果我这样做:

 var nbuf = Buffer.from(message, 'utf8'); console.log('nbuf:', nbuf); console.log('nbuf.buffer:', nbuf.buffer); console.log('nbuf.buffer.byteLength:', nbuf.buffer.byteLength); 

它logging下这个:

 nbuf: <Buffer 22 70 69 6e 67 22> nbuf.buffer: ArrayBuffer { byteLength: 8192 } nbuf.buffer.byteLength: 8192 

字节长度是很高的。 我在这里做错了什么?

谢谢

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer

ArrayBuffer.prototype.byteLength只读
数组的大小(以字节为单位) 。 这是在数组被构build并且不能被改变时build立的 。 只读。

看来你不应该假设byteLength属性等于ArrayBuffer元素占用的实际字节长度。

为了得到实际的字节长度,我build议使用Buffer.byteLength(string[, encoding])

文档: https : //nodejs.org/api/buffer.html#buffer_class_method_buffer_bytelength_string_encoding

例如,

 var message = JSON.stringify('ping'); console.log('byteLength: ', Buffer.byteLength(message)); 

正确给出

byteLength:6