質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

257閲覧

<Buffer>とは

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/01/28 10:14

txt

1hogehogehogehoge 2abcde

js

1 2//readFilePractice.js 3 4var fs = require("fs") 5 6fs.readFile("./hoge.txt", (error, data) => { 7 if (error) { 8 return console.log(error) 9 } else { 10 return console.log(data) 11 } 12})

readFilePractice.jsをnodeで実行した結果

<Buffer 68 6f 67 65 68 6f 67 65 68 6f 67 65 68 6f 67 65 0a 61 62 63 64 65>

このような結果が得られます。
これは一体なんなのでしょうか。
data.toString("utf8")
とすると、テキスト内部の文字が得られます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

これは一体なんなのでしょうか。

バイナリデータです。
もともとパソコンは0と1のデータしか読み書き出来ないという話はご存知ですか?

0と1が一生続くバイナリの文字列を人間が見るのは辛いので、
4文字を1セットにした16進数に変換して閲覧します。
更にこの16進数を2文字まとめて00〜FFの範囲の数値で表現したのがバイトです。

バイナリエディタというエディタでUTF-8で書かれたこんな感じのファイルを開けば同じような数値の羅列を確認出来ます。

UTF-8等の文字コードとは、
文字コードの名の通り、FFのバイトを3つ使って日本語の1文字を表現しましょうみたいなルールで変換することで、
人間が読み書き出来る文字として表現しています。

まぁ、メモリやHDDの中は人間が読む必要がないので、
こういったバイナリデータがそのままどさっと置いてあります。
単純にその方がパソコンが読み書きする時速いし、データサイズの消費量も少ないのでそうしています。


Webアプリケーションを作るエンジニアだと中々馴染みがありませんが、
Node.js内のネイティブJavaScriptコードだけでZIPファイルの圧縮解凍をエミュレートしたい!
…みたいな用途でバイナリデータを扱えないと非常にこまるので、こういった形でサポートされています。

普段は使わないので忘れてしまっても構わないと思います。
.toString(文字コード)で文字列が取り出せるくらいに思っていれば良いと思います。

投稿2019/01/28 10:31

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/28 11:14

なるほどです、解答ありがとうございます。 今回の場合は、中身のデータ自体は、バイナリというデータ形式になっていて、それをバッファーオブジェクト(?)が持っているような形でしょうか。
miyabi-sun

2019/01/28 11:50 編集

そうですね。 もともとJavaScriptはバイナリデータを扱う言語として設計されていませんので、 Node.jsでバイナリを扱うオブジェクトとして用意しておいて、バイナリデータの読み書きに必要な機能をメソッドとして実装しています。
退会済みユーザー

退会済みユーザー

2019/01/28 11:48

なるほどです。 ありがとうございます。 今回に限らず何度か解答頂いてて、感謝しております。
guest

0

投稿2019/01/28 10:28

編集2019/01/28 10:29
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問