要在网络上的javascript中使用字符串创建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);
此日志:
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);
记录下来:
nbuf: <Buffer 22 70 69 6e 67 22>
nbuf.buffer: ArrayBuffer { byteLength: 8192 }
nbuf.buffer.byteLength: 8192
byteLength是通向高的方式。我在这里做错了吗?
由于
答案 0 :(得分:2)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer
ArrayBuffer.prototype.byteLength只读
数组的大小(以字节为单位)。这是在构造数组时建立的,无法更改。只读。
您似乎不应假设byteLength
属性等于ArrayBuffer
中元素占用的实际字节长度。
为了获得实际的字节长度,我建议使用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