2017-01-26 7 views
1

文字列から正しくないあなたがこれを行うウェブ上のJavaScriptで文字列からUTF-8バッファを作成するには、次のノードにしかしNode.jsのバッファ

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

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

このログを私はこれを行う場合の.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); 

は、それがこのログに記録します3210

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

バイト長は高いです。私はここで何か間違っていますか?

おかげ

+2

なぜ 'byteLength'ですか?これは実装の詳細のようですが、[API](https://nodejs.org/api/buffer.html)には「byteLength」プロパティがないためです。 'nbuf.length'の値は何ですか? – cartant

+1

@cartantありがとう! 'nbuf.length'は' 6'を正しく与えましたが、私はhttp://stackoverflow.com/a/12101012/1828637で 'Buffer'は単に' Uint8Array'であり、 'nbuf.buffer'を実行するとjavascript' ArrayBuffer'には 'byteLength'があります。 nbufのArrayBufferの 'byteLengthf'はどうして8192ですか? – Noitidart

+2

私は、 'Buffer'インスタンスがより大きな基底のバッファから割り当てられていることを覚えているようです。おそらく内部の' buffer'プロパティが参照するものです。しかし、私はNodeの内部動作について専門家はいないので、それに対する決定的な答えは分かりません。 – cartant

答えて

2

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

ArrayBuffer.prototype.byteLength読み取り専用
サイズ(バイト単位)、配列の。これは、配列が構築されたときに確立されたであり、変更することはできません。読み取り専用。

あなたがArrayBufferの要素によって占められる実際のバイト長に等しくなるようにbyteLengthプロパティを仮定するべきではありませんようです。 、私が使用することをお勧め

実際のバイト長を得るために

Buffer.byteLength(string[, encoding])

ドキュメント:

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

が正しく与え https://nodejs.org/api/buffer.html#buffer_class_method_buffer_bytelength_string_encoding例えば

バイト長:6

+0

ありがとうJeonghyeon! – Noitidart

関連する問題