<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## 概述 Buffer對象是Node.js用來處理二進制數據的一個接口。JavaScript比較擅長處理Unicode數據,對于處理二進制格式的數據(比如TCP數據流),就不太擅長。Buffer對象就是為了解決這個問題而提供的。該對象也是一個構造函數,它的實例代表了V8引擎分配的一段內存,基本上是一個數組,成員都為整數值。 Buffer是Node原生提供的全局對象,可以直接使用,不需要`require('buffer')`。 Buffer對象與字符串的互相轉換,需要指定編碼格式。目前,Buffer對象支持以下編碼格式。 * ascii * utf8 * utf16le:UTF-16的小頭編碼,支持大于U+10000的四字節字符。 * ucs2:utf16le的別名。 * base64 * hex:將每個字節轉為兩個十六進制字符。 V8引擎將Buffer對象占用的內存,解釋為一個整數數組,而不是二進制數組。所以,`new Uint32Array(new Buffer([1,2,3,4]))`,生成的Uint32Array數組是一個4個成員的Uint32Array數組,而不是只有單個成員([0x1020304]或者[0x4030201])的。 注意,這時類型化數組所對應的內存是從Buffer對象拷貝的,而不是共享的。類型化數組的buffer屬性,保留指向原Buffer對象的指針。 類型化數組的操作,與Buffer對象的操作基本上是兼容的,只有輕微的差異。比如,類型化數組的slice方法返回原內存的拷貝,而Buffer對象的slice方法創造原內存的一個視圖(view)。 ## Buffer構造函數 Buffer作為構造函數,可以用new命令生成一個實例,它可以接受多種形式的參數。 ~~~ // 參數是整數,指定分配多少個字節內存 var hello = new Buffer(5); // 參數是數組,數組成員必須是整數值 var hello = new Buffer([0x48, 0x65, 0x6c, 0x6c, 0x6f]); hello.toString() // 'Hello' // 參數是字符串(默認為utf8編碼) var hello = new Buffer('Hello'); // 參數是字符串(不省略編碼) var hello = new Buffer('Hello', 'utf8'); // 參數是另一個Buffer實例,等同于拷貝后者 var hello1 = new Buffer('Hello'); var hello2 = new Buffer(hello1); ~~~ ## 類的方法 ### Buffer.isEncoding() Buffer.isEncoding方法返回一個布爾值,表示Buffer實例是否為指定編碼。 ~~~ Buffer.isEncoding('utf8') // true ~~~ ### Buffer.isBuffer() Buffer.isBuffer方法接受一個對象作為參數,返回一個布爾值,表示該對象是否為Buffer實例。 ~~~ Buffer.isBuffer(Date) // false ~~~ ### Buffer.byteLength() Buffer.byteLength方法返回字符串實際占據的字節長度,默認編碼方式為utf8。 ~~~ Buffer.byteLength('Hello', 'utf8') // 5 ~~~ ### Buffer.concat() Buffer.concat方法將一組Buffer對象合并為一個Buffer對象。 ~~~ var i1 = new Buffer('Hello'); var i2 = new Buffer(' '); var i3 = new Buffer('World'); Buffer.concat([i1, i2, i3]).toString() // 'Hello World' ~~~ 需要注意的是,如果Buffer.concat的參數數組只有一個成員,就直接返回該成員。如果有多個成員,就返回一個多個成員合并的新Buffer對象。 Buffer.concat方法還可以接受第二個參數,指定合并后Buffer對象的總長度。 ~~~ var i1 = new Buffer('Hello'); var i2 = new Buffer(' '); var i3 = new Buffer('World'); Buffer.concat([i1, i2, i3], 10).toString() // 'Hello Worl' ~~~ 省略第二個參數時,Node內部會計算出這個值,然后再據此進行合并運算。因此,顯式提供這個參數,能提供運行速度。 ## 實例屬性 ### length length屬性返回Buffer對象所占據的內存長度。注意,這個值與Buffer對象的內容無關。 ~~~ buf = new Buffer(1234); buf.length // 1234 buf.write("some string", 0, "ascii"); buf.length // 1234 ~~~ 上面代碼中,不管寫入什么內容,length屬性總是返回Buffer對象的空間長度。如果想知道一個字符串所占據的字節長度,可以將其傳入Buffer.byteLength方法。 length屬性是可寫的,但是這會導致未定義的行為,不建議使用。如果想修改Buffer對象的長度,建議使用slice方法返回一個新的Buffer對象。 ## 實例方法 ### write() write方法可以向指定的Buffer對象寫入數據。它的第一個參數是所寫入的內容,第二個參數(可省略)是所寫入的起始位置(從0開始),第三個參數(可省略)是編碼方式,默認為utf8。 ~~~ var buf = new Buffer(5); buf.write('He'); buf.write('l', 2); buf.write('lo', 3); console.log(buf.toString()); // "Hello" ~~~ ### slice() slice方法返回一個按照指定位置、從原對象切割出來的Buffer實例。它的兩個參數分別為切割的起始位置和終止位置。 ~~~ var buf = new Buffer('just some data'); var chunk = buf.slice(4, 9); chunk.toString() // "some" ~~~ ### toString() toString方法將Buffer對象,按照指定編碼(默認為utf8)轉為字符串。 ~~~ var hello = new Buffer('Hello'); hello // <Buffer 48 65 6c 6c 6f> hello.toString() // "Hello" ~~~ toString方法可以只返回指定位置內存的內容,它的第二個參數表示起始位置,第三個參數表示終止位置,兩者都是從0開始計算。 ~~~ var buf = new Buffer('just some data'); console.log(buf.toString('ascii', 4, 9)); // "some" ~~~ ### toJSON() toJSON方法將Buffer實例轉為JSON對象。如果JSON.stringify方法調用Buffer實例,默認會先調用toJSON方法。 ~~~ var buf = new Buffer('test'); var json = JSON.stringify(buf); json // '[116,101,115,116]' var copy = new Buffer(JSON.parse(json)); copy // <Buffer 74 65 73 74> ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看