2
2

More than 1 year has passed since last update.

【Node.js】ファイル処理周りで調べたことmemo【Buffer, Stream...】

Last updated at Posted at 2022-10-07

はじめに

expressでファイル関連の処理を実装する際に前提知識がなさすぎたので初歩的なことを調べました。
その際にメモしたものをつらつらと書いていきます(雑です

バイナリデータ

  • コンピュータが見て分かる/扱えるデータ
    • binaryは「2進法の」という意味
    • 具体的には画像、音楽、動画、圧縮されたファイルなど
  • 一般的には人間が読めるテキストデータ以外のデータを指すことが多い
    • バイナリとテキストは対比の意である

バイト

  • 1byte = 8bit
  • 1か0を並べた数値の1個をbitと言う

Buffer

  • Node上でバイナリデータを扱うためのクラス
    • 文字列とは全く別ものであるバイナリデータ(バイト列)を扱う
    • ちなみに文、字列を扱うクラスはString
    • ちなみに、C言語ではこの両者を同じ型として扱える
  • new Buffer(128)のような形で書くと128バイトのバッファを作成できる

ArrayBuffer

  • JavaScriptでバイナリを扱うためのオブジェクトである
    • 他の言語ではバイト配列と呼ばれていたりする
  • const buffer = new ArrayBuffer(30);みたいな形で宣言できる
    • 引数で指定した長さの物理のメモリ空間がバイナリ保存用として確保される
  • 確保されるだけで直接読み書き等の操作はできない
    • 操作したい場合はDataViewまたはTypedArrayというオブジェクトをインターフェースとして使用する
  • 例えばBase64やローカルファイルから配列バッファーを取得できる
  • 参考

TypedArray

  • 型付き配列を指す
  • Float32ArrayUint8Array など型を指定して、バッファから配列を生成する
  • 通常の配列(Array)のように添字によってバッファにアクセス可能で「高速に」読み書きが行える
  • 参考

Dataview

  • TypedArrayよりも高機能なバッファ操作用クラス

Blob(Binary Large OBject)

  • ① ブラウザ(WebAPI)で実装されているバイナリデータを扱うクラス
    • テキストやバイナリデータとして読み込んだり、ReadableStream に変換してそのメソッドを使ったデータ処理をしたりすることができる
    • FileインターフェースはBlobを継承していて、ファイル操作を拡張している
  • ② データベースで用いられるデータ型の1つで、ビデオや音声、圧縮ファイル、実行ファイルなどの非構造化データ、プレーンテキスト(平文の文字数字)以外のバイナリデータを格納する際に用いられる
  • 参考

Stream

  • Node上でデータストリームを扱うためのオブジェクト
  • ファイル全体をメモリに乗せて、オブジェクトに書き込むため、メモリリークやパフォーマンス問題が発生する時に使われる
  • データを小分けにして順番に扱うので、同じようなデータをどっかに流したいだけ(順次読みこんで、順次書き込む)とか、配列のような順序の決まったものに対して逐次計算をしていくとかの時に使う
  • 参考

Base64

その他分かりやすかった資料

2
2
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
2
2