神奇的nodejs:Buffer---二進制文件流和TCP流的文件寫入和轉碼讀取,以及輸出方式

TCP是基於流式傳輸的

如果對TCP流式傳輸不太明白的可以先看上面的解釋鏈接

我們此次以nodejs獲取到vcenter認證信息裏面的session-id爲例,上代碼:

const https = require('https');
var session_id = '';
const fs = require('fs');

function getsession_id(params) {
    const options = {
        host: '172.17.xx.xxx',
        port: 443,
        path: '/rest/com/vmware/cis/session',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        auth: '[email protected]:xxxx',
        rejectUnauthorized: false
    };
    const req = https.request(options, (res) => {
        //console.log(res.headers['set-cookie'][0]);
        //if (res.headers['set-cookie'][0].indexOf('vmware-api-session-id') > -1) {
        //    console.log(res.headers['set-cookie'][0]);
        //}
        res.on('data', (d) => {
            console.log(d);
            fs.writeFileSync('a.txt', d);
            process.stdout.write(d);
        });
    });

    req.on('error', (e) => {
        console.error(e);
    });
    req.end();
}

console.log(d)的輸出的內容如下:

<Buffer 7b 22 76 61 6c 75 65 22 3a 22 35 62 33 66 39 37 36 64 30 66 37 39 30 35 33 31 61 34 35 35 66 32 33 31 30 62 32 63 66 61 39 31 22 7d>

process.stdout.write(d)的輸出內容爲:

{"value":"5b3f976d0f790531a455f2310b2cfa91"}

文件a.txt的內容爲:

直接讀取a.txt的文件內容

const session_idsss = fs.readFileSync('a.txt');

輸出內容爲:

<Buffer 7b 22 76 61 6c 75 65 22 3a 22 39 39 65 36 61 36 64 33 32 33 30 36 30 34 30 35 36 38 66 65 65 31 30 35 37 38 35 37 39 38 65 31 22 7d>

那麼爲什麼針對同一個TCP流,console.log和process.stdout.write()以及文件寫入的形式都不一樣呢?

從比較淺層的.log()和process.stdout.write()來講,標準化輸出實現了一些編碼的轉換,而log知識單純的將所見所得的字節數據流純天然的打印在控制檯上(當然這樣理解可能比較淺顯)。

console.log()對於這種tcp流控的打印需要如下方式:

console.log(d.toString())能夠達到與process.stdout.write(d)的輸出效果

那麼我們可以通過文件的輸入輸出來達到這種的流數據的保存和轉換如下:

    const session_idsss = fs.readFileSync('a.txt', {
        encoding: 'utf-8',
        flags: 'string'
    });

 

 

這一部分比較深了,希望以後能繼續探討

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章