2016-02-05 41 views
1

使用Node.js v5.1.0,我試圖確定緩衝區的內容長度。因此,我這樣做:Buffer.byteLength返回截然不同的字節長度

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 ... > 

我加載文件系統上的109055個字節(KB 111在磁盤上)的圖像(OS X),但我的內容長度計算返回198,147字節。如果我將編碼設置爲ascii,則返回104,793字節。更接近,但仍然不正確。

我是否正確計算?我是否需要對緩衝區執行某些操作才能使其返回正確的值?如果我做得對,爲什麼差距?如果我做錯了,那麼請分享;)

+0

難道你不是指'self.data.byteLength'嗎? – Amit

+0

哈!是的,這完全有效。謝謝。如果你願意,把它作爲答案扔進去?如果你知道爲什麼另一種方式存在,工作,但返回錯誤的值,這將是超級;) – brandonscript

+0

[Buffer.byteLength](https://nodejs.org/api/buffer.html#buffer_class_method_buffer_bytelength_string_encoding)預計字符串作爲第一個參數,而不是一個緩衝區,所以也許有一個轉換正在進行,它會混淆。數據是否在'self.data'文本中? –

回答

2

如文檔中所述,Buffer.byteLength()返回字符串假定特定編碼的字節長度。

Buffer類型實際上是一個ArrayBuffer這意味着它的長度可以通過byteLength屬性獲取。另外,Node的實現增加了一個提供相同長度的length屬性。

相關問題