LoginSignup
0
0

非同期でのNode.jsのファイル読み込みの振る舞いを確認してみる

Last updated at Posted at 2023-10-25

前準備

環境

OS:Windows 11 Home 64 ビット オペレーティング システム
CPU:11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz 3.00 GHz
RAM:32.0 GB
Node.js:Node.js v20.4.0.

サンプルとなるテキストファイルを作成する

sample.txt
Line_001:1行目
Line_002:2行目
Line_003:3行目
Line_004:4行目
Line_005:5行目

ログ出力用関数を準備する

fDateTime.js
module.exports = function() {
    //formatted DateTime
    date = new Date();
    const yyyy = date.getFullYear();
    const mm = ('0' + (date.getMonth() + 1)).slice(-2);
    const dd = ('0' + date.getDate()).slice(-2);
    const hh = ('0' + date.getHours()).slice(-2);
    const mi = ('0' + date.getMinutes()).slice(-2);
    const ss = ('0' + date.getSeconds()).slice(-2);
    const ms = ('0' + date.getMilliseconds()).slice(-3);
    return yyyy + mm + dd + hh + mi + ss + '.' + ms;
}

ファイル取得(非同期・一括)fs.ReadFile を確認

機能を実装する

fs_readFile.js
const fDateTime = require('.\\fDateTime.js');

const FILE = "data\\sample.txt";
const ENCODING = "utf-8";

console.log("ファイル取得(非同期・一括)fs.ReadFile:"+FILE);

const fs = require("fs");
fs.readFile(FILE, ENCODING, (err, data) => {
    if (err) throw err;
    console.log(data);
});

動作させてみる

image.png

振る舞い確認用のログを付加する

fs_readFile_addDateTimeLog.js
const fDateTime = require('.\\fDateTime.js');

const FILE = "data\\sample.txt";
const ENCODING = "utf-8";

console.log("ファイル取得(非同期・一括)fs.ReadFile:"+FILE);
console.log("main start:"+fDateTime());

const fs = require("fs");
fs.readFile(FILE, ENCODING, (err, data) => {
    console.log("readFile Callback start:"+fDateTime());
    if (err) throw err;
    console.log(data);
    console.log("readFile Callback end  :"+fDateTime());
});
console.log("main end  :"+fDateTime());

動作させて非同期の振る舞いを確認する

image.png

ファイル取得(非同期・指定バイト分を取得)fs.read を確認

機能を実装する

fs_read.js
const fDateTime = require('.\\fDateTime.js');

const FILE = "data\\sample.txt";
const ENCODING = "utf-8";

console.log("ファイル取得(非同期・指定バイト分を取得)fs.read:"+FILE);

const BUFF_SIZE          = 200;
const BUFF_OFFSET        = 0;
const READ_BYTES_LENGTH  = 18;
const READ_POSITION      = 20;

const fs = require("fs");
fs.open(FILE, "r", (err, fd) => {
    if (err) throw err;
    const buff = Buffer.alloc(BUFF_SIZE);
    fs.read(fd, buff, BUFF_OFFSET, READ_BYTES_LENGTH, READ_POSITION, (err, bytesRead, buffer) => {
        if (err) throw err;
        console.log(buffer.toString(ENCODING, 0, READ_BYTES_LENGTH));
        fs.close(fd, (err) => {
            if (err) throw err;
        });
    });
});

動作させてみる

image.png

振る舞い確認用のログを付加する

fs_read_addDateTimeLog.js
const fDateTime = require('.\\fDateTime.js');

const FILE = "data\\sample.txt";
const ENCODING = "utf-8";

console.log("ファイル取得(非同期・指定バイト分を取得)fs.read:"+FILE);
console.log("main start:"+fDateTime());

const BUFF_SIZE          = 200;
const BUFF_OFFSET        = 0;
const READ_BYTES_LENGTH  = 18;
const READ_POSITION      = 20;

const fs = require("fs");
fs.open(FILE, "r", (err, fd) => {
    console.log("open Callback start:"+fDateTime());
    if (err) throw err;
    const buff = Buffer.alloc(BUFF_SIZE);
    fs.read(fd, buff, BUFF_OFFSET, READ_BYTES_LENGTH, READ_POSITION, (err, bytesRead, buffer) => {
        console.log("read Callback start:"+fDateTime());
        if (err) throw err;
        console.log(buffer.toString(ENCODING, 0, READ_BYTES_LENGTH));
        fs.close(fd, (err) => {
            console.log("close Callback start:"+fDateTime());
            if (err) throw err;
            console.log("close Callback end :"+fDateTime());
        });
        console.log("read Callback end :"+fDateTime());
    });
    console.log("open Callback end :"+fDateTime());
});
console.log("main end  :"+fDateTime());

動作させて非同期の振る舞いを確認する

image.png

以下のサイトを参考にしました

nodejs.org File system

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0