91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nodejs中如何使用string_decoder模塊將buffer轉成string

發布時間:2021-05-14 14:24:58 來源:億速云 閱讀:480 作者:小新 欄目:web開發

小編給大家分享一下Nodejs中如何使用string_decoder模塊將buffer轉成string,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

本篇文章給大家介紹一下Nodejs中使用string_decoder模塊將buffer轉成string的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

Nodejs中如何使用string_decoder模塊將buffer轉成string

模塊簡介

string_decoder模塊用于將Buffer轉成對應的字符串。使用者通過調用stringDecoder.write(buffer),可以獲得buffer對應的字符串。【推薦學習:《nodejs 教程》】

它的特殊之處在于,當傳入的buffer不完整(比如三個字節的字符,只傳入了兩個),內部會維護一個internal buffer將不完整的字節cache住,等到使用者再次調用stringDecoder.write(buffer)傳入剩余的字節,來拼成完整的字符。

這樣可以有效避免buffer不完整帶來的錯誤,對于很多場景,比如網絡請求中的包體解析等,非常有用。

入門例子

這節分別演示了decode.write(buffer)decode.end([buffer])兩個主要API的用法。

例子一:

decoder.write(buffer)調用傳入了Buffer對象<Buffer e4 bd a0>,相應的返回了對應的字符串;

const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');

// Buffer.from('你') => <Buffer e4 bd a0>
const str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0]));
console.log(str);  // 你

例子二:

decoder.end([buffer])被調用時,內部剩余的buffer會被一次性返回。如果此時帶上buffer參數,那么相當于同時調用decoder.write(buffer)decoder.end()

const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');

// Buffer.from('你好') => <Buffer e4 bd a0 e5 a5 bd>
let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5]));
console.log(str);  // 你

str = decoder.end(Buffer.from([0xbd]));
console.log(str);  // 好

例子:分多次寫入多個字節

下面的例子,演示了分多次寫入多個字節時,string_decoder模塊是怎么處理的。

首先,傳入了<Buffer e4 bd a0 e5 a5>還差1個字節,此時,decoder.write(xx)返回

然后,再次調用decoder.write(Buffer.from([0xbd])),將剩余的1個字節傳入,成功返回

const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');

// Buffer.from('你好') => <Buffer e4 bd a0 e5 a5 bd>
let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5]));
console.log(str);  // 你

str = decoder.write(Buffer.from([0xbd]));
console.log(str);  // 好

例子:decoder.end()時,字節數不完整的處理

decoder.end(buffer)時,僅傳入了的第1個字節,此時調用decoder.end(),返回了?,對應的buffer為<Buffer ef bf bd>

const StringDecoder = require('string_decoder').StringDecoder;

// Buffer.from('好') => <Buffer e5 a5 bd>
let decoder = new StringDecoder('utf8');
let str = decoder.end( Buffer.from([0xe5]) );
console.log(str);  // ?
console.log(Buffer.from(str));  // <Buffer ef bf bd>

官方文檔對于這種情況的解釋是這樣的(跟廢話差不多),大約是約定俗成了,當utf8碼點無效時,替換成ef bf bd

Returns any remaining input stored in the internal buffer as a string. Bytes representing incomplete UTF-8 and UTF-16 characters will be replaced with substitution characters appropriate for the character encoding.

以上是“Nodejs中如何使用string_decoder模塊將buffer轉成string”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

内黄县| 肥乡县| 铅山县| 柳江县| 沙湾县| 洛浦县| 新源县| 谢通门县| 万荣县| 平陆县| 金昌市| 肥西县| 江永县| 喀喇沁旗| 张家口市| 贵定县| 佳木斯市| 吴忠市| 林口县| 宝兴县| 铜陵市| 泸定县| 新竹县| 诸暨市| 汤阴县| 台前县| 桐柏县| 衡南县| 始兴县| 淄博市| 建宁县| 兴隆县| 万全县| 镇原县| 文昌市| 咸宁市| 青浦区| 饶河县| 宜川县| 桑植县| 佛学|