溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何將Nodejs中的buffer轉(zhuǎn)為JSON格式和UTF-8字符串

發(fā)布時(shí)間:2021-08-26 11:52:33 來(lái)源:億速云 閱讀:1349 作者:小新 欄目:web開(kāi)發(fā)

小編給大家分享一下如何將Nodejs中的buffer轉(zhuǎn)為JSON格式和UTF-8字符串,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Node.js 和基于瀏覽器的 JavaScript 有所不同,因?yàn)?Node 甚至在 ES6 草案提出 ArrayBuffer 之前就有處理二進(jìn)制數(shù)據(jù)的方法。在 Node 中,Buffer(緩沖區(qū)) 類(lèi)是大多數(shù) I/O 操作使用的主要數(shù)據(jù)結(jié)構(gòu)。它是在 V8 堆外部分配的原始二進(jìn)制數(shù)據(jù),一旦分配,就無(wú)法調(diào)整大小。

在 Node v6.0 之前,要?jiǎng)?chuàng)建新的緩沖區(qū),我們只需使用 new 關(guān)鍵字調(diào)用構(gòu)造函數(shù):

let newBuff = new Buffer('I Love You')

v6.0 之后,要?jiǎng)?chuàng)建新的緩沖區(qū)實(shí)例:

let newBuff = Buffer.from('I Love You')

new Buffer() 構(gòu)造函數(shù)已被棄用,并被單獨(dú)的 Buffer.from()、Buffer.alloc()Buffer.allocUnsafe() 方法替換。

更多信息可以閱讀官方文檔

將 Buffer 轉(zhuǎn)換為 JSON

緩沖區(qū)可以轉(zhuǎn)換為 JSON。

let bufferOne = Buffer.from('All work and no play makes Jack a dull boy')
console.log(bufferOne)

// <Buffer 41 6c 6c 20 77 6f 72 6b 20 61 6e 64 20 6e 6f 20 70 6c 61 79 20 6d 61 6b 65 73 20 4a 61 63 6b 20 61 20 64 75 6c 6c 20 62 6f 79>

let json = JSON.stringify(bufferOne, null, 2)
console.log(json)
/*
{
  "type": "Buffer",
  "data": [
    65,
    108,
    108,
    32,
    119,
    111,
    114,
    107,
    32,
    97,
    110,
    100,
    32,
    110,
    111,
    32,
    112,
    108,
    97,
    121,
    32,
    109,
    97,
    107,
    101,
    115,
    32,
    74,
    97,
    99,
    107,
    32,
    97,
    32,
    100,
    117,
    108,
    108,
    32,
    98,
    111,
    121
  ]
}
*/

JSON 指定要轉(zhuǎn)換的對(duì)象的類(lèi)型是 Buffer 及其數(shù)據(jù)。

將 JSON 轉(zhuǎn)換為 Buffer

let bufferOriginal = Buffer.from(JSON.parse(json).data)
console.log(bufferOriginal)

// <Buffer 41 6c 6c 20 77 6f 72 6b 20 61 6e 64 20 6e 6f 20 70 6c 61 79 20 6d 61 6b 65 73 20 4a 61 63 6b 20 61 20 64 75 6c 6c 20 62 6f 79>

將 Buffer 轉(zhuǎn)換為 UTF-8 字符串

console.log(bufferOriginal.toString('utf8')) // All work and no play makes Jack a dull boy

.toString() 不是將緩沖區(qū)轉(zhuǎn)換為字符串的唯一方法。此外,默認(rèn)情況下,它會(huì)轉(zhuǎn)換為 utf-8 格式字符串。

另一種將緩沖區(qū)轉(zhuǎn)換為字符串的方法是使用 Node.js API 中的 StringDecoder 核心模塊。

string_decoder 模塊提供了用于將 Buffer 對(duì)象解碼為字符串(以保留編碼的多字節(jié) UTF-8 和 UTF-16 字符的方式)的 API。 上述例子的替代寫(xiě)法如下:

const { StringDecoder } = require('string_decoder')
const decoder = new StringDecoder('utf8')

let bufferOriginal = Buffer.from(JSON.parse(json).data)
console.log(decoder.write(bufferOriginal)) // All work and no play makes Jack a dull boy
console.log(decoder.end(bufferOriginal)) // All work and no play makes Jack a dull boy

當(dāng) Buffer 實(shí)例被寫(xiě)入 StringDecoder 實(shí)例時(shí),會(huì)使用內(nèi)部的緩沖區(qū)來(lái)確保解碼后的字符串不包含任何不完整的多字節(jié)字符。 這些都保存在緩沖區(qū)中,直到下一次調(diào)用 stringDecoder.write() 或調(diào)用 stringDecoder.end()。

以上是“如何將Nodejs中的buffer轉(zhuǎn)為JSON格式和UTF-8字符串”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI